繁体   English   中英

父类和子类中的c ++同名成员

[英]c++ same name member in parent and child class

我在c++编程中遇到了一个问题,如果在c++父类和子类有一个同名的成员:

#include <iostream>
using namespace std;

class A{
private:
    int x;
public:
    A(){x=1;}
    void SetX(int i)
    {
        x=i;
    }

};

class B:public A{
private:
    int x;
public:
    B(){}
   int GetX()
    {
        return x;
    }
};
int main() {
    B b;
    cout<<b.GetX()<<endl;
    b.SetX(10);
    cout<<b.GetX()<<endl;
    return 0;
}

程序结果是:

-858993460
-858993460

为什么?返回哪个x
谢谢你的帮助。

B::GetX将始终返回B::x

A::SetX将始终设置A::x

由于B::x从未初始化,因此其值将是不确定的并且打印它将导致未定义的行为

在C ++中,子类中的符号被定义为“隐藏”父类中具有相同名称的任何符号。 这样,代码所指的符号不是模糊的。 请注意,这是不可取的,因为您的代码显示的混乱!

有关键字using ,可以将某些父类符号“提升”到子类中。 但同样,在这种情况下,这是不可取的!

查看基类中的重载方法 ,但默认情况下使用成员变量作为保证using位置的示例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM