2011-06-05 114 views
0

可能重複:
Default class inheritance access繼承子類時的默認保護級別是什麼?

我知道我可以設置保護級別,當我宣佈從超類的子類,如:

class Dog : public Pet { 
    *blah, blah, blah* 
} 

但什麼是該在這種情況下保護級別默認爲?

Class Dog: Pet { 
    *blah, blah, blah* 
} 
+1

你有一個編譯器?你不能只測試這些東西嗎? – Andrei 2011-06-05 20:35:08

+0

@Andrei:當你知道如何測試時,它很容易測試。但它看起來像OP知道如何做測試?基於這個問題本身,似乎不太可能。現在解釋一個簡單的測試(像綁定一個引用並看到編譯失敗)可能對你有用。 – 2011-06-05 20:36:16

+0

@Martin:你可以添加一個測試來證明你的答案(包括必要的'//不會編譯註釋等)。 – 2011-06-05 20:37:49

回答

6

對於一類是私人

class Dog: Pet // Pet is inherited privately. 
{} 

對於一個結構它是公共的。

struct Dog: Pet // Pet is inherited publicly. 
{} 

簡單的測試:

class Pet {}; 
class DogClass: Pet {}; 
struct DogStruct: Pet {}; 
int main() 
{ 
    DogClass dogClass; 
    // Pet&  pet1 = dogClass; This line will not compile. 

    DogStruct dogStruct; 
    Pet&  pet2 = dogStruct; 
}