class A
{
protected:
string word;
};
class B
{
protected:
string word;
};
class Derived: public A, public B
{
};
word
如何影响变量Derived
的可访问性?我该如何解决?
答案 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::word
和A::word
在Derived
之外,您可以像这样访问它们(如果您将其访问权限更改为公开):< / p>
Derived c;
c.A::word = "hi";
c.B::word = "happy";
尝试访问c.word
会导致错误,因为没有名称为word
的字段,但只有A :: word和B :: word。
在Derived
内,他们的行为与常规字段相同,其他答案中也提到了名称A::var
和B::var
。
答案 3 :(得分:3)
访问word
课程中的Derived
时,您必须声明
class Derived: public A, public B
{
Derived()
{
A::word = X;
//or
B::word = x;
}
};