【C++知识点】继承
创始人
2024-05-29 12:53:16
0

✍个人博客:https://blog.csdn.net/Newin2020?spm=1011.2415.3001.5343
📚专栏地址:C/C++知识点
📣专栏定位:整理一下 C++ 相关的知识点,供大家学习参考~
❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪
🎏唠叨唠叨:在这个专栏里我会整理一些琐碎的 C++ 知识点,方便大家作为字典查询~

继承

三种继承方式

不同的继承方式会影响基类成员在派生类中的访问权限。

public继承方式

  1. 基类中所有 public 成员在派生类中为 public 属性;
  2. 基类中所有 protected 成员在派生类中为 protected 属性;
  3. 基类中所有 private 成员在派生类中不能使用。

protected继承方式

  1. 基类中的所有 public 成员在派生类中为 protected 属性;
  2. 基类中的所有 protected 成员在派生类中为 protected 属性;
  3. 基类中的所有 private 成员在派生类中不能使用。

private继承方式

  1. 基类中的所有 public 成员在派生类中均为 private 属性;
  2. 基类中的所有 protected 成员在派生类中均为 private 属性;
  3. 基类中的所有 private 成员在派生类中不能使用。

重点

  1. 派生类从基类那里继承了什么?

    基类的公有成员将成为派生类的公有成员,基类的私有对象也将成为派生类的一部分,但只能通过基类的公有和保护方法访问。

  2. 派生类不能从基类那里继承什么?

    • 构造函数
    • 赋值运算符
    • 析构函数
    • 友元

菱形继承

案例

// 间接基类A
class A{
protected:int m_a;
};
// 直接基类B
class B: public A{
protected:int m_b;
};
// 直接基类C
class C: public A{
protected:int m_c;
};
//派生类D
class D: public B, public C{
public:void seta(int a){//m_a = a; //命名冲突A::m_a = a;	//命名不再冲突}void setb(int b){m_b = b; //正确}void setc(int c){m_c = c; //正确} void setd(int d){m_d = d; //正确} 
private:int m_d;
};
int main(){D d;return 0;
}

虚继承

在 C++ 中,在使用 多继承 时,如果发生了 菱形继承,那么就会出现数据冗余的问题,为了解决菱形继承出现的数据冗余的问题,C++ 提出了虚继承,虚继承使得派生类中只保留一份间接基类的成员。

语法

class B: virtual public A{ //虚继承
};

案例

// 间接基类A
class A{
protected:int m_a;
};
// 直接基类B
class B: virtual public A{
protected:int m_b;
};
// 直接基类C
class C: virtual public A{
protected:int m_c;
};
//派生类D
class D: public B, public C{
public:void seta(int a){m_a = a; //正确}void setb(int b){m_b = b; //正确}void setc(int c){m_c = c; //正确} void setd(int d){m_d = d; //正确} 
private:int m_d;
};

虚继承构造函数

在 C++ 中,普通的 继承 时,可以在子类直接显式的调用父类的 构造函数,在 虚继承 中,虚基类是由最终的派生类初始化的。

也就是说,最终派生类的构造函数必须要调用虚基类的构造函数。对最终的派生类来说,虚基类是间接基类,而不是直接基类。这跟普通继承不同,在普通继承中,派生类构造函数中只能调用直接基类的构造函数,不能调用间接基类的。

// 间接基类A
class A{
public:A(int a):m_a(a){}
protected:int m_a;
};
// 直接基类B
class B: virtual public A{
public:B(int a, int b):A(a), m_b(b){}void display(){cout << "Call B m_a = " << m_a << ", m_b = " << m_b <
public:C(int a, int c):A(a), m_c(c){}void display(){cout << "Call C m_a = " << m_a << ", m_c = " << m_c <
public:// a最终会初始化为50,而不是90和100D(int a, int b, int c, int d):A(a), B(90, b), C(100, c), m_d(d){}void display(){cout << "Call D m_a = " << m_a << ", m_b = " << m_b << ", m_c = " << m_c << ", m_d = " << m_d << endl;}void seta(int a){m_a = a; //正确}void setb(int b){m_b = b; //正确}void setc(int c){m_c = c; //正确} void setd(int d){m_d = d; //正确} 
private:int m_d;
};
int main(){B b(10, 20);b.display();C c(30, 40);c.display();D d(50, 60, 70, 80);d.display();return 0;
}

相关内容

热门资讯

安卓子系统应用闪退,探究安卓子... 手机里的安卓子系统应用突然闪退,是不是让你心头一紧?别急,今天就来给你详细剖析一下这个让人头疼的问题...
早期使用安卓系统的手机,开启智... 你还记得那些早期使用安卓系统的手机吗?那时候,智能手机才刚刚崭露头角,安卓系统就像一颗新星,引领着手...
完全摆脱安卓系统的软件,探索无... 你有没有想过,手机里的安卓系统有时候就像是个无形的枷锁,让你觉得自由受限?别急,今天我要给你介绍一些...
苹果怎么玩安卓系统游戏,轻松实... 你有没有想过,用苹果手机也能玩安卓系统的游戏呢?是不是觉得有点不可思议?别急,今天就来给你揭秘这个神...
安卓改系统设置背景,打造专属手... 你有没有发现,你的安卓手机最近有点儿“水土不服”?运行速度慢了下来,界面也变得不那么顺眼了?别急,今...
zte电视安卓系统恢复,轻松解... 亲爱的读者,你是不是也遇到了这样的烦恼:家里的ZTE电视突然间安卓系统出了问题,屏幕上满是乱码,操作...
安卓系统相机可调尺寸,捕捉完美... 你有没有发现,现在手机的拍照功能越来越强大了?尤其是安卓系统的相机,功能丰富得让人眼花缭乱。今天,就...
联想恢复系统和安卓 你有没有想过,你的手机里那些珍贵的照片、视频和文件,如果突然不见了,你会怎么办?别担心,今天就来给你...
安卓平板刷数播系统,操作指南与... 你有没有想过,你的安卓平板电脑除了用来刷剧、玩游戏,还能干点啥?今天,就让我带你一探究竟,看看如何让...
安卓系统下密码键盘,安卓系统密... 你有没有发现,每次解锁手机时,那小小的密码键盘就像一个神秘的守护者,默默守护着你的隐私呢?今天,就让...
荣耀九零是安卓系统吗,深度解析... 你有没有听说过荣耀九零这款手机?最近它可是手机圈里的小热门呢!很多人都在问,荣耀九零是安卓系统吗?今...
安卓系统是谁的分支系统,谷歌基... 你有没有想过,安卓系统这个我们每天不离手的家伙,它究竟是从哪里来的呢?没错,它可是有一个超级厉害的“...
安卓怎么改系统壁纸,个性化你的... 手机屏幕上那单调的壁纸已经让你审美疲劳了吗?别急,今天就来教你怎么给安卓手机换上美美的系统壁纸! 一...
安卓系统动画效果图 你有没有发现,每次打开安卓手机,那些流畅的动画效果总是让人眼前一亮?今天,就让我带你一起探索安卓系统...
安卓10系统提示音,唤醒听觉感... 你有没有发现,自从你的手机升级到了安卓10系统,那提示音好像变得特别有个性呢?是不是觉得有点好奇,想...
镧系统工具箱安卓,全面解析与使... 你有没有发现,手机上的工具箱越来越强大了?今天,我要给你介绍一个特别酷的镧系统工具箱安卓版,它可是让...
姓名同步系统下载安卓,实现高效... 你有没有想过,手机里的联系人信息竟然可以如此智能地同步?今天,就让我来给你揭秘一个神奇的小工具——姓...
安卓系统声音调高,畅享极致音效... 你有没有发现,最近你的安卓手机声音好像变得特别小?是不是觉得跟以前比起来,好像少了点什么?别急,今天...
苹果系统安卓电脑版下载,轻松实... 你有没有想过,为什么苹果系统的应用总是那么吸引人?而安卓电脑版下载又有哪些独特之处呢?今天,就让我带...
安卓系统如何变得高端,五大策略... 你有没有发现,安卓系统最近好像悄悄地变了个样?不再是那个简单粗暴的小伙子,而是摇身一变,成了时尚界的...