C++ 学习之继承1:基类与派生类

面向对象编程OOP(object-oriented programming)的关键思想是多态性。C++中多态性用于通过继承而相关联的类型的引用或指针。

首先看看基本的基类和派生类,以C++ primer中一个程序段为例:

在基类Item_base中我们可以看到,这里面存在public、protected和private三种访问控制标号。public成员可以被一切用户代码所访问;protected成员可以由基类及派生类访问,但不能由普通用户代码访问;private成员可以由基类和友元访问;其实派生类对基类成员的访问是由基类中的成员访问控制级别和派生类派生列表中使用的访问标号共同控制的,其中的派生类列表时如下形式的:

calss classname : access-label base-calss-name.可以参见图中的Bulk_item继承Item_base的写法。其中的access-label 有public、protected和private三种。

不管上面哪种继承,如果是基类中的private,派生类是不能访问的。对于积累中的public成员和protected成员,当public继承时,性质不变,当protected继承时,基类中的public和protected成员都会变为protected的,当private继承时,基类的所有成员在派生类中都是private成员。总之一句话,派生类可以对所继承的基类成员的访问控制做进一步约束,但是不能放松。同时,当派生类对基类成员整体做进一步约束的时候,也可以对个别基类成员的访问权限进行恢复,但是最多不能比基类中的权限更宽松。如上面的Bulk_item1以private形式继承Item_base类,则原基类中的成员在Bulk_item1中都是private的,此时想要恢复基类中的isbn访问权限,但是因为isbn在基类中的访问权限为protected的,因此最多能恢复到protected的,而不能更宽松到public的。

你可能感兴趣的:(C++语言学习)