在编程语言的世界里,继承意味着子类中包含父类所有的一切。那么如果在子类中声明了跟父类名字以及类型都一样的成员变量时会如何处理?这个其实会涉及到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对象: