继承

来源:互联网 发布:mac 卸载工行网银助手 编辑:程序博客网 时间:2024/05/22 19:50

1.公有/私有/受保护继承

基类中的private成员只有基类及其友元函數可以访问,派生类及其用戶无权访问.对于基类的public/protected,则派生类列表中使用的访问标号决定该成员在派生类中的访问级别.

a.public inheritance:成员在基类中是什么类型,在派生类中还是同样的

b.protected inheritance:基类的public/protected成员均变为派生类的protected成员

c.private inheritance:基类的public/protected成员均变为派生类的private成员

2.访问控制和继承

派生类对基类的public/private成员的访问权限和程序中任意其他部分一样

3.protected成员

不能被类的用戶访问,可被该类的派生类访问.派生类只能通过派生类对象访问其基类的protected成员,派生类对其基类类型对象的protected成员没有特殊访问权限(此说明要搭配c++primer 477的例子看才对,即派生类成员函数中可以访问自身对象的protected成员和派生类对象形参中的protected成员,不能访问基类对象形參的protected成员)

4.复制构造函数/赋值操作符VS析构函数

不管是单继承还是多继承,派生类自己定义的析构函数不负责清除基类对象的成员,编译器总是显示调用派生类对象基类部分的析构函数。而如果派生类定义了自己的复制构造函数/赋值操作符,则类负责复制(赋值)所有的基类子部分。

5.多重继承

多重继承容易引发“二义性”,所以调用成员的时候要显示指定是哪一个基类。继承多个基类引入了新的名称冲突的可能性。

6.虚继承

对给定虚基类,无论该类在派生层次中作为虚基类出现多少次,只继承一个共享的基类子对象。假定通过多个派生路径继承成员X,且在某个路径中X是虚基类的成员,在另一条路径中X是后代派生类的成员,不会出现二义性的情况,因为特定派生类实例的优先级高于共享虚基类实例。不过如果X表示后代派生类的不同成员,该成员的直接访问还是二义性的。

虚基类和基类一样,同样支持基类类型指针或引用操纵派生类对象。虚基类有助于减少二义性问题,但是没有完全解决哦。

通常每个类只初始化自己的直接基类。但是在虚派生中,由最底层派生类的构造函数初始化虚基类。


原创粉丝点击