2013-12-20 49 views
0

假設我有兩個類:祖父,父親。父親延伸祖父。祖父有一個名爲a的公共int變量。C++一個類的對象是否可以直接訪問超類的公共變量

如果我在main中創建一個Father類的對象,該對象是否可以直接訪問Grandfather中的公共成員變量a

例如,我嘗試了類似下面的內容,但編譯器說a無法訪問。但是因爲a是公開的,不應該從父親的對象直接訪問它嗎?

int main() 
{ 
    Father father; 

    cout << father.a; 
} 
+1

將類聲明/定義添加到您的代碼片段中。 –

+3

'a'是一個靜態成員嗎​​?或'Father.a'應該是'father.a'? – Arkadiy

+0

代碼已被更正 – navig8tr

回答

2

如果我在主創建父類的對象確實對象在祖父 直接訪問公共成員變量?

是的。

但是,這不是你在這裏做什麼:

cout << father.a; 

在這裏,我們試圖從main中直接得到的Fathera成員,從子類中。

如果您收到有關此代碼無法訪問的a的錯誤,則a不是您所設想的public

+0

代碼已更正,以反映我的問題 – navig8tr

+0

@ navig8tr:請參閱我的編輯。 –

+0

如果'a'被保護而不是公開? 「父」對象是否仍然可以直接訪問? – navig8tr

6

公共成員對於任何類的對象都可見,而不僅僅是子類。

+0

如果一個人受到保護而不是公開?父親對象是否仍然可以直接訪問? – navig8tr

+1

是的。在這種情況下,只有子類可以訪問它。 – Eutherpy

2

這取決於父親從祖父如何繼承:

// Inherit from Base publicly 
class Father: public Grandfather 
{ 
}; // father.a is accessible from main() 

// Inherit from Base privately 
class Father: private Grandfather 
{ 
}; // father.a is NOT accessible from main() 

// Inherit from Base protectedly 
class Father: protected Grandfather 
{ 
}; // father.a is NOT accessible from main() 

class Father: Grandfather // Defaults to private inheritance 
{ 
}; // father.a is NOT accessible from main() 

話雖如此,但要區分,如果a是在祖父公衆,那麼它是從內部父親的任何方法訪問,任何這些遺產。請注意,這不是你在你的例子中所做的 - 你直接從main()訪問a,這可以被認爲是外部的父親和祖父的

+0

它是沒有關鍵字的繼承。 '父親:祖父' – navig8tr

+0

這一定是我犯錯的原因。 – navig8tr

+0

私有是默認行爲,這就是爲什麼你不能從main()訪問father.a。即使該成員在基類中是公開的,但它在子類中是私有的。 – Eutherpy

相關問題