是否可以在成員類中定義 指向父類的指標 ?

時間 2021-06-06 19:45:52

1樓:張翼德

這要分class B的宣告(.h)和實現(.cpp)檔案兩個地方:

如果你在class B的宣告(.h)裡沒有用到任何class A 的成員, 比如就像你問題裡寫的那樣,只是用到了class A的名字,那你只要在class B前面宣告:

class A;

讓compiler知道 「A是個class」 就行了,不需要包含A的標頭檔案。因為實現 class A的指標,不需要知道class A本身有多大。

但是在class B的實現(.cpp)裡,還是要包含兩個類的標頭檔案,因為這時你會用到A的成員變數,compiler需要知道class A 的布局。

(假設你已經知道每個標頭檔案都要 #pragma once避免重複包含。)

2樓:蔡傑

不管如何設計,都應該避免你的繼任者遇到下面這個問題:

「臥槽,這裡怎麼有A,B兩個類來實現這件事情,我到底應該new哪乙個還是兩個都new還是怎麼地啊。。。」

所以,不管內部如何實現,請做好封裝。。

至於A,B的h檔案互相include,是不要緊的。。

#ifdef會的吧?或者#program once?

在定義B前宣告A就可以了。

3樓:

B不需要包含A標頭檔案,因為B裡面只有A指標,編譯器不需要知道A的定義,在編譯器編譯B時,A是incomplete type並且合法。

C 在類中能定義本身型別的成員嗎?

番茄.go 至少有兩種情況是允許的。指標靜態成員變數 Member.cpp include classA AA a int main 執行 g Wall O2 o Member Member.cpp Member An object of class A.An object of class A.A...

為什麼 C 中,基類指標可以指向派生類物件?

WangKX 語法就這麼規定這叫多型性,如果往深點說,因為子類物件一般比父類物件大,因此這麼指並沒問題,但反過來不行比如子類指標指向父類物件 馬東啥梅來著 不同型別的指標在記憶體中所佔大小是相同的,區別在於編譯器對於指標的解釋是不同的。乙個指標指向某個類的物件,實際上是指向該物件所佔記憶體的首位址位...

Python中既然可以直接通過父類名呼叫父類方法為什麼還會存在super函式?

拾人牙慧 不要一說到 super 就想到父類,super 指的是 MRO Method Resolution Order,它代表了類繼承的順序 中的下乙個類!def super cls,inst mro inst.class mro return mro mro.index cls 1 它的設計目的...