今天面试时被问到C++的子类与父类有同名变量时,C++会如何处理。
示例代码如下:

class A {public:int a;A(){ a=0; }
};
class B:public A{public:int a;B(){ a=0;}
};int main() {A* a=new B();a->a=1;B* b=(B*)a;b->a=4;
}

C++的类的内存布局是先父类,再子类。
所以当B类中既有A的a也有B的a。
内存布局如下:

(gdb) p *b
$6 = {<A> = {a = 1}, a = 0}
(gdb) x/2x b
0x761a50:   0x00000001  0x00000000

当运行完a->a=1时,A类中的a被置为1,存放在B类的a前。


如果想要在B类中调用A的a,操作方法如下:

b->A::a=7;

从汇编代码也可以看出差别:

     //    a->a=1;mov     rax, QWORD PTR [rbp-24]mov     DWORD PTR [rax], 1//  b->a=4;mov     rax, QWORD PTR [rbp-32]mov     DWORD PTR [rax+4], 4

地址偏移量在编译时就确定的。

C++ 面试题:子类与父类同名变量相关推荐

  1. python子类与父类属性重名_9.6.子类调用父类同名属性和方法

    # 子类调用父类同名属性和方法 ~~~ class Master(object): def __init__(self): self.kongfu = "古法烤冷面配方" # 实例 ...

  2. Python OOP:继承、单继承、多继承、__mro__、子类重写父类同名属性和方法、子类调用父类同名属性和方法、多层继承、super()、私有(实例)属性和方法、获取修改私有属性值、私有类属性

    一.继承 Python⾯向对象的继承指的是多个类之间的所属关系,即⼦类默认继承⽗类的所有属性和⽅法. 继承作用:继承可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展. 在P ...

  3. Java子类访问父类私有变量的思考

    示例如下: 父类User,包含私有变量name和money: 以及两个构造函数和基本的getter方法. public class User {public User() {}public User( ...

  4. json解析 子类和父类同名属性如何赋值_想学变量的解构赋值?看完这一篇就够了...

    序言 ES6允许按照一定模式从数组和对象中提取值,然后对变量进行复制,这被称为解构(Destructuring) 数组的解构赋值 基本用法 像上面的例子,可以从数组中提取值,按照对应位置对变量赋值,这 ...

  5. php 子类重新定义父类的变量_PHP设计模式 ——(抽象工厂模式)

    1.抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂. 这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. ...

  6. java 调用父类的变量_java创建子类对象设置并调用父类的变量操作

    通过子类调用父类的变量,有两种方法: 1.把父类的变量设置成public: package triangle.opengl.wlz.stu.childusefathervariable; import ...

  7. java子类和父类有相同成员_Java -- 父类和子类拥有同名的成员变量的情况

    Java – 父类和子类拥有同名的成员变量取值情况 参考文章 结论: 当子类的成员变量与父类同名时,若对该成员变量进行操作的方法继承于父类,则改变和获取的是父类的成员变量.若对该成员变量进行操作的方法 ...

  8. java 子类 同名参数_Java -- 父类和子类拥有同名变量

    Java -- 父类和子类拥有同名变量 Java -- 父类和子类拥有同名变量 Java – 父类和子类拥有同名变量 请仔细观察系列两段程序的不同之处:一个Son类重写print方法,另一个则没有重写 ...

  9. C++ - 子类与父类的同名成员变量

    1.思考 子类中是否可以定义父类中的同名成员?如果可以,如何区分?如果不可以,为什么? 代码示例: #include <iostream> #include <string>u ...

最新文章

  1. MPB:东林牛犇组玉米根系简化细菌群落的定量与其生物防治效果的评价方法(视频)...
  2. 写个Vue小组件,图片滚动
  3. django html5 video,Django Web中的静态文件之HTML5第1篇
  4. java 业务层业务接口层_Java web五层架构
  5. 新CCIE笔记之'口口相传'路由协议
  6. test 2016-12-28
  7. Java并发教程–重入锁
  8. 奇奇seo优化软件_西藏seo关键词优化软件
  9. 2018年五大最佳前端框架比较,程序员会怎么选?
  10. 【转】深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第六节 理解垃圾回收GC,提搞程序性能****
  11. 有关锁和内存使用的DMV
  12. 动态规划——单词拆分(Leetcode 139)
  13. 下载丨7月数据库技术通讯:LINUX OS配置问题导致数据库重启
  14. paip.项目开发效率提升之思索
  15. 小插件,通过js实现邮箱自动提示功能
  16. openwrt 添加usb网卡_树莓派安装OpenWrt教程
  17. 文献阅读—GAIN:Missing Data Imputation using Generative Adversarial Nets
  18. i7z – 用来查看CPU状况
  19. 探秘前端 CRDT 实时协作库 Yjs 工程实现
  20. 【vue2】05_动态组件 插槽 自定义指令

热门文章

  1. 中科院分子细胞科学卓越创新中心化学生物学技术平台与Bio-protocol联合发布——《高内涵成像及分析实验手册》...
  2. Bioinformatics:吉林大学刘富组-深度学习从宏基因组序列中识别短病毒序列Virtifier...
  3. ISME:中大李文均组在放线菌生命暗物质的生态功能与进化上取得进展
  4. MPB:湖南师大尹佳组-​乳酸菌益生菌表面粘附能力的检测
  5. ISME:高手开杠-‘1%的微生物可培养’到底为哪般?
  6. QIIME 2教程. 27语义类型Semantic(2020.11)
  7. NAR:antiSMASH数据库2—次级代谢物基因簇预测
  8. 扩增子图表解读5火山图:差异OTU数量及变化规律
  9. 水稻微生物组时间序列分析4-随机森林回归
  10. R语言使用DALEX包的model_performance函数对caret包生成的多个算法模型进行残差分布分析并使用箱图进行残差分布的可视化