[C++] 关于子类声明与父类同名同类型的成员变量的问题

在编程语言的世界里,继承意味着子类中包含父类所有的一切。那么如果在子类中声明了跟父类名字以及类型都一样的成员变量时会如何处理?这个其实会涉及到C++中所谓的名字mangling的机制,所谓name mangling是指C++中为了区分输入的相同名字的东西,例如函数重载,多个虚表指针,等等,所以当出现前面提到的情况时,实际上编译器会把父类和子类的成员变量mangling化,使其独一无二,例如,如下两个类:

class Base {
public:
    int m_a;
};

<pre name="code" class="cpp">class Drived : public Base {
public:
    int m_a;
};
 
实际编译器会对m_a进行重命名,使其不再一样,在子类Drived中可能会变成这个样子: 

class Drived : public Base {
public:
    int m_a_3Base;
    int m_a_3Drived;
};
在子类中可以这样访问父类中的m_a:

Drive d;
d.Base::m_a = 1;
d.m_a = 2;
此时的d对象:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值