开发者社区> CtrlX> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

C++继承中的对象模型与继承中构造和析构顺序

简介: 继承中的对象模型 问题:从父类继承过来的成员,哪些属于子类对象中? 示例: class Base { public: int m_A; protected: int m_B; private: int m_C; //私有成员只是被隐藏了,但是还是会继承下去
+关注继续查看



继承中的对象模型

问题:从父类继承过来的成员,哪些属于子类对象中?

示例:

class Base

{

public:

    int m_A;

protected:

    int m_B;

private:

    int m_C; //私有成员只是被隐藏了,但是还是会继承下去

};

//公共继承

class Son :public Base

{

public:

    int m_D;

};

void test01()

{

    cout << "sizeof Son = " << sizeof(Son) << endl;

}

int main() {

    test01();

    system("pause");

    return 0;

}

利用工具查看:Visual Studio 的开发人员命令提示符

打开工具窗口后,定位到当前CPP文件的盘符

然后输入: cl /d1 reportSingleClassLayout查看的类名 所属文件名

效果如下图:

image

结论: 父类中私有成员也是被子类继承下去了,只是由编译器给隐藏后访问不到

继承中构造和析构顺序

子类继承父类后,当创建子类对象,也会调用父类的构造函数

问题:父类和子类的构造和析构顺序是谁先谁后?

示例:

class Base

{

public:

    Base()

    {

        cout << "Base构造函数!" << endl;

    }

    ~Base()

    {

        cout << "Base析构函数!" << endl;

    }

};

class Son : public Base

{

public:

    Son()

    {

        cout << "Son构造函数!" << endl;

    }

    ~Son()

    {

        cout << "Son析构函数!" << endl;

    }

};

void test01()

{

    //继承中 先调用父类构造函数,再调用子类构造函数,析构顺序与构造相反

    Son s;

}

int main() {

    test01();

    system("pause");

    return 0;

}

速记:构造时现有父亲后又儿子,析构顺序相反(白发送黑发)

总结:继承中 先调用父类构造函数,再调用子类构造函数,析构顺序与构造相反


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
元数据管理为什么需要统一的元模型?
每个组织都有自己的数据管理方式。有的公司准备自研并制定了长期计划,有的公司使用最新的数据管理工具和技术,有的公司则是为了满足监管机构的要求。这几种的思路完全不一样。 要让公司成为真正的数据驱动型组织,不仅仅需要制定数据策略或推出更新的软件技术。关键在于数据的整体治理和管理,解决这个问题的一个好方法就是元数据管理。元数据管理是DAMA数据治理体系中的一部分,元数据管理与其他数据治理领域巧妙结合,发挥出巨大的作用。
134 0
JVM详解 --- JVM内存模型与对象创建过程
JVM详解 --- JVM内存模型与对象创建过程
67 0
ES6—05:利用构造函数创建对象
ES6—05:利用构造函数创建对象
57 0
C++的黑科技(深入探索C++对象模型)
来源:http://www.cnblogs.com/qiaozhoulin/p/5227673.html “如何产生一个不能被继承的类”,这道题我反反复复只想到,将父类的构造函数私有,让子类不能调用,最后归结出一个单例模式,但面试官说,单例模式作为此题的解答不够灵活,后来面试官提示说,可以用友元+虚继承,可以完美实现这样一个类 当然那时我还不太明白,友元与虚继承我都极少接触
1170 0
C++对象模型浅析
该文章转自阿里巴巴技术协会(ata)作者:霜天 VTable 虚表 虚表的内存分布 一个简单的包含虚函数的类的声明class A { public: virtual void v_a(){} virtual ~A(){} int64_t _m_a; };
5207 0
文档对象模型DOM(二)
练习; 要求:界面上有个登录按钮,点击登录的时候,界面中弹出一个登录的方框,点击登录方框中的×的,登录方框消失。 1 DOCTYPE html> 2 3 4 5 6 7 8 9 #div{...
769 0
文档对象模型DOM(一)
当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。 HTML DOM 模型被构造为对象的树。 HTML DOM 树 每加载一个标记 注释 或者属性,就将其当做节点(node)。
703 0
+关注
CtrlX
【个人网站】ctrlx.life 【联系方式】微信:gitctrlx 【软件技能】前端,C++,Python,研究网络工程,数据结构与算法。
31
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载