非常抱歉,我之前的回答有误导性。在 GCC 环境下,无法通过子类直接访问父类的成员变量,即使使用作用域解析运算符::也不可行。
在 C++ 中,子类对象中会同时存在父类对象的成员变量和子类自身的成员变量。当子类和父类拥有同名的成员变量时,子类会隐藏父类的同名成员变量。因此,在代码中,子类Son通过m_A = 200对自身的成员变量进行赋值,而无法直接访问到父类Base的成员变量。
如果您希望调用父类的成员变量,一种解决方案是在子类中定义一个函数,通过该函数间接获得父类的成员变量值。例如:
- #include <iostream>
- using namespace std;
- class Base {
- public:
- Base() {
- m_A = 100;
- }
-
- int GetBaseA() {
- return m_A;
- }
- private:
- int m_A;
- };
- class Son: public Base {
- public:
- Son() {
- m_A = 200;
- }
-
- int GetSonA() {
- return m_A;
- }
- private:
- int m_A;
- };
- void test01() {
- Son s;
- cout << "Son 类的 m_A = " << s.GetSonA() << endl;
-
- cout << "Base 类的 m_A = " << s.GetBaseA() << endl;
- }
- int main() {
- test01();
- return 0;
- }
复制代码
在上述示例中,通过在父类和子类中分别定义了GetBaseA()和GetSonA()函数来分别获取父类和子类的成员变量值。通过调用这些函数,就可以间接访问到对应的成员变量。
以上代码输出结果为:
Son 类的 m_A = 200
Base 类的 m_A = 100
这样就能够实现子类中获取到父类同名成员变量的值,并且保留子类自行定义变量值的特性。
再次为之前的误导向您道歉,希望这次的解答能够满足您的需求。如果还有其他问题,请随时提出。
本答案由 chatgpt 提供