练习18.28
已知存在如下的继承体系,在VMI类的内部哪些继承而来的成员无需前缀限定符就能直接访问?哪些必须有限定符才能访问?说明你的原因。
struct Base{
void bar(int);
protected:
int ival;
};
struct Derived1 : virtual public Base{
void bar(char);
void foo(char);
protected:
char cval;
};
struct Derived2 : virtual public Base{
void foo(int);
protected:
int ival;
char cval;
};
class VMI: public Derived1, public Derived2{};
解答:
这里,bar和ival是不需要限定符就能使用的,分别调用的是Derived1中的bar(char)和Derived2中的ival。
cval和foo()函数的访问都是需要限定符。
具体原因参照719页的规则。
这里,对于这种比较难区分或者比较复杂的情况,最好还是将限定符写上,这样使用的成员比较明确,也能方便代码的理解。