我试图解决以下测验。标有蓝色的答案是正确的,标有红色的答案是错误的。据我,如果任何一个类的派生保护然后一路下行的内容不能被访问的层次,但我不知道为什么的答案是错误的。问题解决中的一个继承测验
这里是测验: 对于X,Y和Z,下列组合是什么类型的成员的类A和B都在类直接访问D.Fill一个检查可访问性和横非可访问性。 下面是我的解决办法,
在红色的答案是不正确。下面是我的解释,
private/public/private:
As D is privately derived from C, then it should not have an access to any of the A, B or C.
public/public/private:
As D is privately derived from C, then it should not have an access to any of the A, B or C.
下面是从低于该检查结果的答案代码,
#define X public
#define Y private
#define Z private
class A {
public: int public_a;
protected: int protected_a;
private: int private_a;
};
class B : X A {
public: int public_b;
protected: int protected_b;
private: int private_b;
};
class C : Y B {
};
class D : Z C {
public:
void test_inheritance_visibility()
{
int foo;
foo = public_a;
foo = protected_a;
foo = private_a;
foo = public_b;
foo = protected_b;
foo = private_b;
}
};
希望我已经解释过clearly.Please帮我在清理我的concept.Thanks
这个问题很难理解,你能说清楚吗?基本规范中的访问说明符控制派生到基本转换的可访问性。如果'A'具有公共成员,那么无论继承路径如何,都可以从'D'成员访问它们。无法访问的是将'this'转换为_cv_-'A *',如果它是需要访问的'this'的成员。没有看到示例代码,不清楚蜱和十字会代表什么。 – 2011-04-17 10:19:11
前三列用于A类,其他三列用于B类。支票和交叉表示D类对A和B类的访问。 – 2011-04-17 10:43:54
@Charles:如果A具有公共成员并且B是私人继承的C和D是否相互关联,那么D如何访问A的私有成员?当A被私下继承时,它的所有公共成员都变为私有的 – 2011-04-17 11:20:44