如何理解C++中的继承与虚继承
发表于:2025-02-05 作者:千家信息网编辑
千家信息网最后更新 2025年02月05日,如何理解C++中的继承与虚继承,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。普通的公有继承class test1{public:
千家信息网最后更新 2025年02月05日如何理解C++中的继承与虚继承
如何理解C++中的继承与虚继承,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
普通的公有继承
class test1{public: test1(int i) :num1(i) {}private: int num1;};class test2 : public test1{public: test2(int i,int j) : test1(i), num2(j) { }private: int num2;};void main(){ test2 t2(1,2);}
(test2内存结构)查看内存发现父类在子类的上面
多重继承
在原有的代码基础上增加了test3类
test3类继承了 test2和test1
class test1{public: test1(int i) :num1(i) {}private: int num1;};class test2{public: test2(int i) : num2(i) { }private: int num2;};class test3 :public test2 ,public test1{public: test3(int i, int j,int k) :test1(i), test2(j),num3(k) {}private: int num3;};void main(){ test3 t3(1, 2, 3);}
(test3内存地址 ) 依旧是父类在子类上
但是现在有两个父类为什么test2在test1上?
这和我们的继承顺序有关 我们先继承了test2又继承了test1 更换内存继承顺序 内存的情况也会有所变化
虚继承
class test1{public: test1(int i) :num1(i) {}private: int num1;};class test2: virtual public test1{public: test2(int i,int j) :test1(i), num2(j) { }private: int num2;};void main(){ test2 t2(1, 2);}
(t2的内存) 我们发现虚继承以后父类成员数据在子类成员数据下面了 首地址处莫名其妙多了四字节
这四字节就是我们的虚基类表的地址
跟随虚继承表 其中存储了本类距离父类对象的差值 通过差值能够找到父类对象
我们再看这个内存0x0082fbd8是t2的首地址 0x0082fbe0是父类的位置
0x0082fbd8 - 0x0082fbe0 == 8
就是本类距离父类对象的差值
虚继承(菱形继承)
class test1{public: test1(int i) :num1(i) {}private: int num1;};class test2: virtual public test1{public: test2(int i,int j) :test1(i), num2(j) { }private: int num2;};class test3 :virtual public test1{public: test3(int i, int j) :test1(i), num3(j){}private: int num3;};class test4 :public test2, public test3{public: test4(int i, int j, int k) :test1(i),test2(i,j), test3(i,j),num4(k) { }private: int num4;};void main(){ test4 t4(1, 2,3);}
test4的内存 我们看到 t2和t3都有自己的虚基类表地址 记录了自己和父类的偏移
两个虚基类表的内容
现在我们计算一下 到爷爷类的差值是否正确
0x00FAFD50 - 0x00fafd3c == 14
0x00FAFD50 - 0x00fafd44 == C
关于如何理解C++中的继承与虚继承问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。
内存
地址
差值
子类
对象
问题
C++
两个
内容
字节
就是
成员
数据
更多
顺序
帮助
解答
易行
普通
莫名其妙
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
成绩在数据库怎么定义
济宁中小企业oa软件开发公司
网络安全主题团日
统一软件开发服务应用
国家数据库为啥选在贵州
网络安全险理赔
asp通过数据库制作折线图
软件开发算法设计
美国膳食金字塔数据库
国一互联网科技有限公司
西城区综合网络技术推广品质保障
专技天下网络安全判断题答案
cmu人脸数据库
数据库视图关联数据变多
曙光服务器光模块拔不出
电商和软件开发营业执照注册范围
对5G网络技术的理解
数据库升序和降序输出
科技馆互联网科普信息
如何使用网络安全管理
数据库中代表年份日期时间代码
软件开发年度总结存在问题
前段与软件开发结合
电脑版的服务器mc在哪儿玩
我国未成年人网络安全
中山管理软件开发费用
画面云管理服务器
汕头哪里能学习网络技术
深信服网络技术支持
重庆彭水生鲜类的软件开发