關於類的前向宣告

2021-07-04 04:59:06 字數 1241 閱讀 5049

前向宣告的定義:有些時候我們可以宣告一些類但是並不去定義它,當然這個類的作用也很有限了。

比如class foo;

宣告乙個foo類,這個宣告,有時候也叫做前向宣告(forward declaration),在宣告完這個foo類之後,定義完這個foo類之前的時期,foo類是乙個不完全的型別(incomplete type),也就是說foo類是乙個型別,但是這個型別的一些性質(比如包含哪些成員,具有哪些操作)都不知道。

因此這個類的作用也很有限.

(1)不能定義foo類的物件。

(2)可以用於定義指向這個型別的指標或引用。(很有價值的東西)

(3)用於宣告(不是定義)使用該型別作為形參或者返回型別的函式。

正因為有前向宣告的存在,我們在很多時候可以簡便的做一些事情。

在c++中,如果要為類編寫標頭檔案的話,一般是要#include一堆標頭檔案的,但利用前向宣告和c++編譯器的特性,其中大部分是不需要的。

c++編譯器做的事情主要是:1.掃瞄符號;2.確定物件大小。

所以很多時候並不需要將類都include進來。

比如:(1)由於所有物件型別的引用所占用的空間都是相同大的,所以c++編譯器很好確認物件大小。

class string;

class sample

;

這裡只需要做乙個string的前向宣告就可以了,不需要#include

(2)由於所有型別的指標也是相同大小的。所以與(1)類似,也可以只做前向宣告就好。

(3)宣告成員函式的形參或者是返回型別,也可以利用前向宣告的性質。

class string;

class foo;

class sample

;

這裡,我根本沒有定義乙個foo類,但是還是可以這樣用,因為成員函式不佔類物件的大小,所以c++編譯器還是可以確定物件的大小。

前向宣告的作用在於告訴編譯器這個乙個在別的地方定義的型別。這樣c++編譯器就能生成正確的符號表了。

類前向宣告

class a a void del a ptr int main 正常執行,delete p 先執行類析構函式,通知系統這塊記憶體上的資料已經無效無需維護了,然後使用operator delete 釋放這塊記憶體 class a void del a ptr class a a int main ...

類的前向宣告

在我們看一些c 標頭檔案的時候,經常可以看到某些類的宣告但卻找不到定義。如 class abc 僅僅宣告,沒有定義 通常後面還會有定義指向這個型別的指標或引用,如 abc pointer abc pointer 這種形式稱之為類的前向宣告 引用。在宣告之後,定義之前,類abc是乙個不完全型別 inc...

類的前向宣告

class person void show1 person k cout上述 在友元函式的類外實現中使用了該類,則需在之前宣告,上述 已做宣告。但是上述 依然會報錯,因為類的提前宣告,編譯器只是知道了person這是乙個類,該類的具體細節 例如成員變數 編譯器並不知道,所以此時person又叫做不...