带你了解C++继承与派生

继承与派生的概念

用户用已有的类去定义一个新类,新类将拥有原来类的全部特性,原有类叫做基类(父类),新产生的类叫做派生类(子类)派生类拥有基类的特性叫做继承基类产生派生类的过程叫做派生。

继承方式

公有继承、私有继承、保护继承。

单继承:在类的层次击结构中,除最顶层的基类外,其他派生类有且只有一个父类。

多继承:派生类具有两个及两个以上的直接基类

继承性质

  • 可传递性:类A派生出类B,类B还可以派生出类C。(类A成为类B的直接基类,称为类C的间接基类)
  • 不允许循环:类A派生出类B,类B不能再派生出类A。
\基类属性publicprotectedprivate
继承方式\\\\
public\publicprotected不可访问
protected\protectedprotected不可访问
private\privateprivate不可访问

派生类的实现

class 派生类名称:继承方式1 基类1,继承方式2 基类2.... (不显示继承方式,默认私有继承)
{
    private:
    
    public:
    
    protected:
    
}

派生类构造函数的定义

派生类名(参数总表):基类名1(参数表1),....,基类名m(参数表m),成员对象1(成员对象参数表1),....,成员对象m(成员对象参数表m)
{
    派生类新增成员的初始化
}

单继承的构造与析构

派生类构造函数的调用顺序

  1. 调用基类构造函数
  2. 调用内嵌成员对象的构造函数,调用顺序按照定义的顺序(没有内嵌成员就跳过)
  3. 派生类自己的构造函数

析构函数调用顺序与构造函数相反

多继承的构造函数调用顺序

  1. 调用各级类的构造函数,调用顺序按照被继承时的声明顺序
  2. 调用内嵌成员对象构造函数,成员对象的构造函数的调用顺序按照在派生类中声明的顺序
  3. 调用派生类的构造函数

析构析构函数调用顺序与构造函数相反

二义性问题

如果多个基类中拥有同名的成员,那么,派生类在继承各个基类的成员之后,当我们调用该派生类的成员时,由于该成员标识符不唯一,出现二义性,编译器是无法识别到底应该调用哪个成员。这种由于多继承而引起的对类的某个成员访问出现不唯一的情况称为二义性。

#include<iostream>
using namespace std;
class A
{
    public:
    void show()
    {
        cout<<"A"<<endl;
    }
};
class B
{
    public:
    void show()
    {
        cout<<"B"<<endl;
    }
};
class C:public A,public B
{
    public:
    void Show()//解决二义性问题
    {
        A::show();
        B::show();
    }
};
int main()
{
    C c;
    //c.show();//出现二义性
    c.Show();//正确
}

类型兼容

条件:公有派生

一个派生类对象可以作为基类对象使用的情况叫做类型兼容(类型赋值兼容或类型适应)

三种情况

  1. 派生类对象可以赋值给基类对象
  2. 派生类对象可以初始化基类的引用
  3. 派生类对象的地址可以赋值给指向基类的指针

虚基类

虚基类知识点详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无所畏惧的man

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值