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!!";
}
};
您可以使用using
关键字告诉编译器使用哪个版本:
class Derived : public A, public B
{
protected:
using A::word;
};
这告诉编译器Derived
该类有一个受保护的成员word
,它将是 的别名A::word
。那么每当你word
在Derived
类中使用不合格的标识符时,它就意味着A::word
. 如果你想使用B::word
你必须完全限定范围。
您的班级Derived
将有两个变量,B::word
并且您可以像这样A::word
在外部Derived
访问它们(如果您将它们的访问权限更改为公共):
Derived c;
c.A::word = "hi";
c.B::word = "happy";
尝试访问c.word
将导致错误,因为没有名称为 的字段word
,而只有 A::word 和 B::word。
在内部Derived
,它们的行为再次像常规字段一样,带有名称A::var
,并且B::var
在其他答案中也提到过。
word
在类中访问时Derived
,您必须声明
class Derived: public A, public B
{
Derived()
{
A::word = X;
//or
B::word = x;
}
};