C++类的继承与派生

一、类继承

继承是类的重要性质,继承也是一个进程,子类继承父类,也可以称为父类派生了子类。被继承的类也被称为基类、超类或父类,在基类基础上建立的新类称为派生类或者子类通过继承,一个对象可获得另一个对象的属性(包括函数),并可向其中加入属于自己的一些函数或方法,作用:程序员可创造新的类来拥有原来的类,不必大量时间去修改原来的代码。

公有继承(public):当类的继承方式为公有继承时,基类的公有成员和保护成员在派生类中不变,基类的私有成员不能直接被派生类访问。

保护继承(protected):当类的继承方式为保护继承时,基类的公有成员和保护成员将成为派生类的保护成员。

私有继承(private):当类的继承方式为私有继承时,基类的公有成员和保护成员将成为派生类的私有成员

public:用公用继承的派生类称为公用派生类,其基类称为公用基类。 采用公用继承方式时,基类的公用成员和保护成员在派生类中仍然保持其公用成员和保护成员的属性,而基类的私有成员在派生类中并没有成为派生类的私有成员,它依然是基类的私有成员,只有基类的成员函数可以引用它,而不能被派生类的成员函数引用,因此在派生类中是不可访问的。

private:在声明一个派生类时将基类的继承方式指定为private的,成为私有继承。用私有继承方式建立的派生类称为私有派生类,其基类称为私有基类。私有基类的公用成员和保护成员在派生类中的访问属性相当于派生类中的私有成员。私有基类的私有成员在派生类中仍然是不可访问成员,只有基类的成员可以使用它们。

protected:protected声明的成员称为受保护成员或保护成员。从类的用户角度来看,保护成员等价于私有成员。但保护成员可以被派生类的成员函数引用。在定义一个派生类时将基类的继承方式指定为protected,称为保护继承。用公用继承的派生类称为保护派生类,其基类称为保护基类。保护基类的公用成员和保护成员在派生类中都成了保护成员,其私有成员仍为基类私有,不能被派生类访问。

二、派生类的构造函数和析构函数

在设计派生类的构造函数时,不仅要考虑派生类所增加的数据成员的初始化,还应当考虑基类的数据成员初始化。要在执行派生类的构造函数时,使派生类和基类的数据成员同时得到初始化。如图:


如果派生类中还包含其他类的对象成员,则构造函数的调用顺序是:先调用基类构造函数,再调用成员的构造函数,最后调用派生类的构造函数执行。 在撤销一个派生类对象时,基类的子对象也被撤销。析构函数的调用次序和构造函数的调用次序相反:先调用派生类的析构函数,再调用基类的析构函数。

三、多重继承与虚基类

多重继承是指派生类有两个或者两个以上的基类(我称此为有多个爸爸),多重继承是单继承的扩充,子类与父类的关系可以看作是一个单继承,不写继承方式默认为private继承。

多重继承特点总结如下:

(1)多重继承与多继承不同,当B类从A类派生,C类从B类派生,此时称为多重继承

(2)当实例化子类时,会首先依次调用所有基类的构造函数,最后调用该子类的构造函数;销毁该子类时,则相反,先调用该子类的析构函数,再依次调用所有基类的析构函数。

(3)无论继承的层级有多少层,只要它们保持着直接或间接的继承关系,那么子类都可以与其直接父类或间接父类构成 is a的关系,并且能够通过父类的指针对直接子类或间接子类进行相应的操作,子类对象可以给直接父类或间接父类的对象或引用赋值或初始化

四、类的多态性

一,静态多态

函数重载就是一个简单的静态多态,静态多态是编译器在编译期间完成的,根据实际参数类型来选择和调用合适的函数,如果有合适的函数就调用,没有的话就会报错。

二、动态多态

动态多态是在程序运营期间确定自己该根据基类的引用指向的(指针)来确定自己该调用哪一个类的虚函数(virtual)

三,虚函数

虚函数是在基类中使用关键字 virtual 声明的函数,在派生类中重新定义虚函数。

想要的是在程序中可以根据所调用的对象类型来选择调用的函数,这种操作被称为动态链接。

四、纯虚函数

我们可以在基类中只声明虚函数,没有函数的定义,在派生类中去实现函数的定义,这个时候就会用到纯虚函数(一般与基类的指针连用)例如:virtual   interesting a()=0;

c++小型诊所的代码运用



©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容