一、IS-A继承
1、公有继承
特性
(1)保持基类的访问权限不变,基类数据成员只能通过基类的方法访问
(2)派生类需要自己的构造函数,创建对象时,需要使用成员初始化列表,将基类成员一起初始化
(3)派生类可以重载基类成员函数,也可以添加额外的方法和数据成员
(4)创建派生类对象时,基类对象将被先行创建,即先调用基类的构造函数
(5)如果不调用基类构造函数,直接创建派生类对象时,将使用默认的基类构造函数
实例
2、私有继承
使用情况少
3、保护继承
主要用于继承中派生类可以直接访问基类的protected成员。
二、HAS_A关系
1、在类中使用其他类的对象,如string类对象
2、使用私有继承
三、多态公有继承
特性
(1)能够在派生类中重定义基类的方法,是重定义,原型不一定相同,函数体不同,将隐藏基类方法;重载是原型不同,函数体必须相同;如果基类虚函数被重载,则需在派生类重定义所有版本
(2)基类使用虚方法,在基类和派生类中不同实现
(3)编译器对非虚方法使用静态联编,是哪个数据类型调用哪个方法;使用虚方法,将动态联编,根据指针和引用对象来调用相应的方法
(4)静态联编:执行效率更高,如果类不用做基类,就不使用动态联编!
实例
四、多继承、多重继承和虚拟继承
多继承:一个类继承于多个类
多重继承:一个类继承的多个类又继承于另一个类,会导致创建的类有多份基类的拷贝,浪费内存
虚拟继承:使用虚拟继承从而解决了拷贝多基类的问题,只会保留一份拷贝
浙公网安备 33010602011771号