(1)多重继承,构造函数从最初是的基类开始构造,各个类的同名变量没有形成覆盖,都是各自的变量。
(2)公有继承与私有继承
1)公有继承就像是三口之家的小孩,饱受父母的温暖,享有父母的一切(public和protected的成员)。 其中保护的成员不能被外界所享有,但可以为小孩所拥有。 只是父母还是有其一点点隐私(private成员)不能为小孩所知道。
其派生类可对基类的公有变量:访问+修改,保护变量:访问,私有变量:无
其派生类对象对基类的公有成员:可访问 ;其他:无
2)私有继承就像是离家出走的小孩,父类所有元素无法和子类联系:一个人在外面飘泊。他(她)不能拥有父母的住房和财产(如:gir.eat()是非法的), 在外面自然也就不能代表其父母,甚至他(她)不算是其父母的小孩。但是在他(她)的身体中,流淌着父母的血液,所以,在小孩自己的行为中又有其与父母相似的成分。
C++的默认集成方式,其派生类可对基类的公有变量:访问,保护变量:访问,私有变量:无
其派生类对象对基类的:所有不可见
3)保护继承
其派生类可对基类的公有变量:访问,保护变量:访问,私有变量:无
其派生类对象对基类的:所有不可见
#include
class Animal
{
public:
Animal(){}
void eat(){cout<<"eat\n";}
};
class Giraffe:protected Animal
{
Giraffe(){}
void StrechNeck(double){cout<<"strechneck\n";}
void take()
{
eat(); //ok
}
};
void main()
{
Giraffe gir;
gir.eat(); //error
gir.take(); //ok
gir.StretchNeck();
}
(3)多重继承
1)C:A,B A和B出现了相同方法f(),在C中的区别为C.A::f()与C.B::F()
对于公有继承方式
(1) 基类成员对其对象的可见性:
公有成员可见,其他不可见。这里保护成员同于私有成员。
(2) 基类成员对派生类的可见性:
公有成员和保护成员可见,而私有成员不可见。这里保护成员同于公有成员。
(3) 基类成员对派生类对象的可见性:
公有成员可见,其他成员不可见。
所以,在公有继承时,
派生类的对象可以访问基类中的公有成员;
派生类的成员函数可以访问基类中的
公有成员和保护成员。这里,一定要
区分清楚
派生类的对象和派生类中的成员函数对基类的访问是不同的。
对于私有继承方式
(1) 基类成员对其对象的可见性:
公有成员可见,其他成员不可见。
(2) 基类成员对派生类的可见性:
公有成员和保护成员是可见的,而私有成员是不可见的。
(3) 基类成员对派生类对象的可见性:
所有成员都是不可见的。
所以,在私有继承时,基类的成员只能由直接派生类访问,而无法再往下继承。
对于保护继承方式
这种继承方式与私有继承方式的情况相同。两者的区别仅在于对派生类的成员而言,对基类成员有不同的可见性。
上述所说的可见性也就是可访问性。关于可访问性还有另的一种说法。这种规则中,称派生类的对象对基类访问为水平访问,称派生类的派生类对基类的访问为垂直访问。