【问题标题】:C++ private variable names and inheritance ambiguitiesC++ 私有变量名和继承歧义
【发布时间】:2016-09-20 14:45:48
【问题描述】:

这是关于 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::xB::x 行事吗? 我希望它对A::x 起作用。我想知道在类 A 中将 x 声明为私有是否足以使其免受定义派生类时可能出现的不需要的歧义。

我知道为B::x 使用不同的名称是最好的办法...但是假设一个人“分心”并忘记了私人A::x 的存在,后果会有多糟糕?

谢谢!

【问题讨论】:

    标签: c++ variables inheritance private


    【解决方案1】:

    由于fct 是非虚拟的,它总是将x 作为它自己的类的成员来处理。它不会知道任何其他类中的任何其他xs。

    但是,如果 fct 被声明为 virtual 并在子类中被覆盖,则将调用子覆盖它 - 并且可以对此进行编程,以便它可以使用其他 x

    【讨论】:

      【解决方案2】:

      调用fct 将作用于A::x。派生类具有同名的成员变量这一事实是无关紧要的,因为该成员是私有的并且对它们隐藏。

      如果它能够看到B::x,那就有点像拥有虚拟数据了!

      【讨论】:

        猜你喜欢
        • 2014-04-06
        • 2014-11-17
        • 2012-12-03
        • 2015-09-14
        • 2014-10-28
        • 1970-01-01
        • 1970-01-01
        • 2018-09-19
        • 2015-12-09
        相关资源
        最近更新 更多