继承的特性

C++中的三个特性是继承封装和多态。其中继承的主要用途在于代码的复用。

首先如何继承一个类呢?我们只需要在我们实现的类后面加上继承方法再加上要继承的类名就可以了,此时被继承的类我们叫它基类或者父类,继承的类叫做派生类或者子类。继承分为单继承和多继承,单继承的话表明只继承一个类作为父类,也可以继承多个类,父类之间以“,”隔开就可以了。

那么派生类继承了基类的什么呢?答案是派生类继承了除基类的构造函数和析构函数之外的所有东西,包括作用域。那么为什么不继承构造函数和析构函数呢?因为一个类中只有一个构造函数,而且构造函数的函数名必须与类名相同,所以不可以继承,析构函数也是如此。

下面我们来讨论一下继承方式。基类中不同访问限定符下的成员以不同方式的继承方式继承在派生类中的访问限定不同,下面用一张表来说明他们之间的关系:

第一行代表基类的访问限定 public protected private
中间代表在子类中的访问限定
第一列代表继承方法
public public protected 不可见
protected protected protected 不可见
private private private 不可见

派生类的内存布局 如下图所示:

派生类对象生成需要经过以下几个步骤:

1开辟内存 = 基类内存 + 派生类内存

2对内存空间初始化(调用两次构造函数,都是系统调用,先调用基类的构造函数,再调用派生类的构造函数)

由于基类中的构造函数没有被继承,派生类中没有基类的构造函数,所以要在派生类的构造函数中指明基类。

3析构两次,首先对派生类进行析构,然后对基类进行析构。

基类和派生类的指针或者引用的相互指向或引用怎么处理:

基类指针可以指向派生类的对象,反之不可以。基类的引用可以引用派生类对象,反之不可以。因为如果允许派生类的指针指向基类的话,我们就会将指针理解成派生类,会试图进行解引用操作,然而基类中根本不包含派生类的成员,所以就会出现错误。

最后一点,基类和派生类中的析构函数满足同名覆盖的关系,因此基类指针指向派生类对象的时候,基类中的析构函数要写成虚函数形式,即在析构函数前加virtual关键字。至于什么是虚函数,欢迎查看我的下一个博客。

猜你喜欢

转载自blog.csdn.net/shang_12266029/article/details/88629910