C ++私有变量名称和继承歧义

时间:2016-05-23 16:09:32

标签: c++ variables inheritance private

这是关于变量名中的C ++(而不是java)继承和歧义。

假设我处于这种情况:

class A{
public:
void fct(){do something with x;}

private:
int x;
};

class B: public A{
private:
int x;
};

如果我定义派生类的一些实例

B foo;

然后致电

foo.fct();

fct()A::x还是B::x? 我希望它能在A::x上采取行动。我想知道在类A中将x声明为私有是否足以使其在定义派生类时可能出现的非需要歧义。

我知道只为B::x使用不同的名称是最好的事情......但是假设一个人“分散注意力”并忘记私有A::x存在,那有多糟糕后果会是什么?

谢谢!

2 个答案:

答案 0 :(得分:3)

由于fct是非虚拟的,因此它始终将x作为其自己的类的成员来处理。在任何其他classess中,它都不会知道任何其他x

但是,如果fct被声明为virtual并在子类中被覆盖,则会调用子覆盖,而是调用它 - 这个可以编程,以便它可以使用其他x }。

答案 1 :(得分:1)

致电fct将对A::x采取行动。派生类具有相同名称的成员变量的事实是无关紧要的,因为该成员是私有的并且对它们是隐藏的。

如果它能够看到B::x那么这就像拥有虚拟数据一样!