C++中的继承(派生)的一些误区

1.派生类继承了基类的全部数据成员和除了构造、析构函数之外的全部成员函数,但是这些成员的访问属性在派生的过程中通过继承方式可以来调整。

(个人理解:派生类复制了基类的所有东西,但是防止派生类的误用,或者基类的有些属性子类用不到(继承是全盘拷贝的),就通过继承方式public\private\protected来限制。)

2.派生类成员的构成

1)继承基类成员

2)改造基类成员

  由于基类成员在派生类中可能不起作用,但也被继承下来,在生成对象时要占用内存空间,造成浪费。

  改造基类的方法有:一是继承方式来控制,改变基类成员在派生类中的访问控制属性。

                          二是重载成员函数,则基类成员在派生类中被覆盖(但是仍然存在)。

3)添加新成员

可见:继承和派生的目的在于代码的重用。

3.派生类的构造函数

派生类对象自动拥有几类的所有数据成员,所以,在定义派生类的构造函数时除了对派生类的数据成员进行初始化外,还必须调用基类的构造函数初始化基类的数据成员。如果派生类中有对象成员时,还应该调用对象成员的构造函数初始化对象成员。

个人理解:因为派生类往往无法访问基类的数据成员(一般为private),所以用这种方式初始化基类的数据成员

一般格式:

<派生类名>(<总参数表>):<基类名>(< 参数表1>),<对象成员名>(< 参数表2>) //冒号以后内容称为成员初始化表

     <派生类数据成员的初始化>;

构造函数的调用顺序:基类的构造函数->对象成员的构造函数->派生类的构造函数

析构函数的调用顺序:派生类的析构函数->对象成员的析构函数->基类的析构函数

注意:析构函数没有参数,故不能重载

成员初始化表:其主要作用实在进入派生类的构造函数体前,调用基类的构造函数来初始化从基类继承下来的数据成员和对象成员。当然,派生类新成员也可以在初始化表中被初始化。

使用派生类构造函数注意:

1)当基类没有显式定义构造函数时,拍摄呢个累构造函数的初始化表可以省略对基类构造函数的调用,而采用隐含调用。

2)当基类的构造函数使用一个或者多个参数时,派生类必须定义构造函数,提供将参数传递给基类构造函数的途径。这时,派生类的构造函数体可能为空,仅起到参数传递的作用。

原文地址:https://www.cnblogs.com/Yogurshine/p/2857115.html