前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++继承

C++继承

作者头像
用户2929716
发布2018-08-23 13:17:27
4150
发布2018-08-23 13:17:27
举报
文章被收录于专栏:流媒体流媒体

继承访问权限

父类public

父类protect

父类private

public继承

public

protect

---

protect继承

protect

protect

---

private继承

private

private

---

先看继承的权限关键字,再看父类的成员变量声明关键字。

构造函数执行顺序

  • 调用父类构造方法
  • 调用组合类构造方法
  • 调用本身的构造方法

析构函数执行顺序

与构造函数执行顺序相反

继承中同名成员变量

class A中有x ;class B集成A,同时也有x。则b.x访问的是B中的x。如果要访问A中的x,则用b.A::x。

静态成员变量

  • 遵循集成规则
  • 使用前必须先定义

多继承产生的成员变量多义性

  • 多个继承类继承自同一个祖先类,祖先类中的成员变量使用会产生二义性。如下:

1.png

代码语言:javascript
复制
#include <iostream>

using namespace std;

class A {
public:
    A() {
        cout << "A" << endl;
    }

    int x;
};

class B : public A {
public:
    B() {
        cout << "B" << endl;
    }
};

class B1 : public A {
public:
    B1() {
        cout << "B1" << endl;
    }
};

class C : public B, public B1 {
public:
    C() {
        cout << "C" << endl;
    }
};

int main() {
    cout << "A size=" << sizeof(A) << endl;
    cout << "B size=" << sizeof(B) << endl;
    C c;
    //    c.x;
    return 0;
}

测试一运行结果:发现A类的构造函数调用了两次。

代码语言:javascript
复制
A size=4
B size=4
A
B
A
B1
C

测试二,把//c.x的注释打开。运行报错,提示x不明确

代码语言:javascript
复制
error: request for member 'x' is ambiguous

解决办法,可以在集成B和B1的时候加上virtual关键字。

  • 多个继承类中有同名的成员变量

2.png

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.08.16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 继承访问权限
  • 构造函数执行顺序
  • 析构函数执行顺序
  • 继承中同名成员变量
  • 静态成员变量
  • 多继承产生的成员变量多义性
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档