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

时间:2013-11-04 08:21:10

标签: c++ multiple-inheritance

class A
{
   protected:
    string word;
};

class B
{
   protected:
    string word;
};

class Derived: public A, public B
{

};

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

4 个答案:

答案 0 :(得分:30)

这将是不明确的,你会得到一个编译错误说。

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

 class Derived: public A, public B
{
    Derived()
    {
        A::word = "A!";
        B::word = "B!!";
    }
};

答案 1 :(得分:21)

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

class Derived : public A, public B
{
protected:
    using A::word;
};

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

答案 2 :(得分:5)

您的班级Derived将有两个变量,B::wordA::wordDerived之外,您可以像这样访问它们(如果您将其访问权限更改为公开):< / p>

Derived c;
c.A::word = "hi";
c.B::word = "happy";

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

Derived内,他们的行为与常规字段相同,其他答案中也提到了名称A::varB::var

答案 3 :(得分:3)

访问word课程中的Derived时,您必须声明

class Derived: public A, public B
{
    Derived()
    {
       A::word = X;
       //or
       B::word = x;
    }
};