子类同名变量会隐藏父类成员,需用基类名::变量名访问父类成员。如Base::value可显式调用被隐藏的父类变量,this->value仅访问子类自身成员。

在C++中,当子类和父类存在同名变量时,子类会隐藏父类的同名成员变量。如果需要访问被隐藏的父类变量,可以通过作用域解析运算符 :: 显式调用父类的变量。
使用作用域解析运算符访问父类变量
通过 基类名::成员变量 的方式,可以明确指定访问父类中的同名变量。
示例代码:#includeusing namespace std; class Base { protected: int value; public: Base() : value(10) {} }; class Derived : public Base { private: int value; // 与父类同名,会隐藏父类的value public: Derived() : value(20) {} void printValues() { cout << "父类的value: " << Base::value << endl; // 访问父类变量 cout << "子类的value: " << this->value << endl; // 访问当前类变量 } }; int main() { Derived d; d.printValues(); return 0; }
输出结果:
父类的value: 10 子类的value: 20
注意事项
直接使用变量名时,默认访问的是子类自身的成员。若想获取父类中定义的值,必须加上 Base:: 前缀。
立即学习“C++免费学习笔记(深入)”;
- 该方法适用于被隐藏的成员变量,不涉及继承中的虚函数或多态机制。
- 即使父类变量为 protected 或 public,只要子类定义了同名变量,就会发生隐藏。
- 不能仅靠 this 指针访问父类变量,this->value 指向的是子类自己的 value。
多层继承中的调用
在多重继承或多层次继承结构中,同样适用此方法。只需指明具体基类名称即可。
例如:struct A { int x = 5; };
struct B : A { int x = 10; };
struct C : B { void show() { cout << A::x << endl; } }; // 访问祖父类A的x
基本上就这些。只要记住:同名变量会被遮蔽,要用 基类名::变量名 的形式显式访问父类成员。不复杂但容易忽略细节。











