class A
{
protected:
string word;
};
class B
{
protected:
string word;
};
class Derived: public A, public B
{
};
如何将变量的无障碍word
在Derived
受到影响?我将如何解决它?多重继承:相同的变量名
class A
{
protected:
string word;
};
class B
{
protected:
string word;
};
class Derived: public A, public B
{
};
如何将变量的无障碍word
在Derived
受到影响?我将如何解决它?多重继承:相同的变量名
这将是明确的,并且你会得到一个编译错误说。
你需要使用正确的范围内使用它:
class Derived: public A, public B
{
Derived()
{
A::word = "A!";
B::word = "B!!";
}
};
当全班同学的Derived
访问word
,你不得不宣布
class Derived: public A, public B
{
Derived()
{
A::word = X;
//or
B::word = x;
}
};
你的类Derived
将有两个变量,B::word
和A::word
外Derived
你可以这样访问它们(如果你改变自己的访问市民):
Derived c;
c.A::word = "hi";
c.B::word = "happy";
试图访问c.word
将导致错误,因为没有现场机智h名称word
,但只有A :: word和B :: word。
里面Derived
他们的行为像常规字段,同样在名称A::var
和B::var
也在其他答案中提到。
可以使用using
关键字告诉编译器所使用的版本:
class Derived : public A, public B
{
protected:
using A::word;
};
这告诉Derived
类有一个保护成员word
,这将是一个别名A::word
编译器。然后,无论何时使用Derived
类中的非限定标识word
,这将意味着A::word
。如果你想使用B::word
,你必须完全限定范围。
请注意,除了下面的良好答案之外,尽可能避免此类名称冲突总是一个好策略。 –