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;
}
};