多重继承:相同的变量名称

Jac*_*her 18 c++ multiple-inheritance

class A
{
   protected:
    string word;
};

class B
{
   protected:
    string word;
};

class Derived: public A, public B
{

};
Run Code Online (Sandbox Code Playgroud)

如何word影响变量的可访问性Derived?我该如何解决?

Yoc*_*mer 31

这将是模糊的,你会得到一个编译错误说.

您需要使用正确的范围来使用它:

 class Derived: public A, public B
{
    Derived()
    {
        A::word = "A!";
        B::word = "B!!";
    }
};
Run Code Online (Sandbox Code Playgroud)


Som*_*ude 22

您可以使用该using关键字告诉编译器使用哪个版本:

class Derived : public A, public B
{
protected:
    using A::word;
};
Run Code Online (Sandbox Code Playgroud)

这告诉编译器Derived该类有一个受保护的成员word,它将是一个别名A::word.然后,无论何时wordDerived类中使用非限定标识符,都意味着A::word.如果您想使用B::word,则必须完全限定范围.

  • 在一个完整的句子中使用A :: word`将是:"编译器,当我在下面的子句中谈到`word`时,我的意思是'A :: word`" (3认同)

Vis*_*war 5

您的类Derived将有两个变量,B::word并且A::word之外Derived,你可以这样访问它们(如果你改变自己的公众访问):

Derived c;
c.A::word = "hi";
c.B::word = "happy";
Run Code Online (Sandbox Code Playgroud)

尝试访问c.word将导致错误,因为没有名称的字段word,但只有A :: word和B :: word.

在内部,Derived他们表现得像普通的领域,再次,与名称,A::varB::var在其他答案中也提到.