2022.10.3实训笔记

121 阅读3分钟

继承

假设基类Base1和Base2是已经定义的类,下面的语句定义了一个名为Derived的派生类,该类由Base1和Base2派生而来。

class Derived : public Base1, private Base2 {
public:
    Derived ();
    ~Derived ();
}

一个派生类,可以同时有多个基类,这种情况称为多继承,这时派生类同时得到了多个类已有的特征

在派生过程中,派生出来的新类可以作为基类再继续派生出新的类,此外,一个基类可以同时派生出多个派生类。这样就形一个相互关联的类的家族,有时也称为类族。在类族中,直接参与派生出新类的基类称为直接基类,基类的基类,或更高层的基类称为间接基类。

在派生类的定义中,除了要指定基类外,还需要指定继承方式。继承方式规定了如何访问从基类继承的成员。在派生类的定义语句中,每个继承方式只限定紧随其后的基类。继承方式有public, protected和private,如果不显式的给出继承方式,系统默认为私有继承。

派生类成员是指:包括从基类继承来的成员和新增加的数据和成员函数。这些新增加的成员,正是派生类不同于基类的关键所在,是对派生类的发展

派生类生成过程

在C++ 程序设计中,派生新类的过程,实际经历了3个步骤:吸收基类的成员,改造基类成员,添加新的成员。面向对象的继承和派生机制,最重要的目的是实现代码重用和扩充。因此,吸收基类成员是一个重用的过程,而对基类成员进行调整,改造以及添加新成员就是原有代码扩充的过程。二者相辅相乘。

Virtual

在c++中,基类必须将它的两种成员函数区分开来

(1)一种是基类希望其派生类进行覆盖(override)的函数。这种函数,基类通常将其定义为虚函数(加virtual)。当我们使用基类的指针或者引用调用虚函数时,该调用将被动态绑定。

(2)另外一种是基类希望派生类直接继承而不需要改变的函数。 基类通过在其成员函数的声明语句之前加关键字virtual使得该函数执行动态绑定。 任何构造函数之外的非静态函数都可以是虚函数。

基类的析构函数为什么要用virtual虚析构函数?

C++中基类采用virtual虚析构函数是为了防止内存泄漏。具体地说,如果派生类中申请了内存空间,并在其析构函数中对这些内存空间进行释放。假设基类中采用的是非虚析构函数,当删除基类指针指向的派生类对象时就不会触发动态绑定,因而只会调用基类的析构函数,而不会调用派生类的析构函数。

因此,派生类中申请的空间就得不到释放从而产生内存泄漏。所以,为了防止这种情况的发生,C++中基类的析构函数应采用virtual虚析构函数。