我試圖解決以下測驗。標有藍色的答案是正確的,標有紅色的答案是錯誤的。據我,如果任何一個類的派生保護然後一路下行的內容不能被訪問的層次,但我不知道爲什麼的答案是錯誤的。問題解決中的一個繼承測驗
這裏是測驗: 對於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