c 中的前向宣告

2021-07-22 11:00:43 字數 1485 閱讀 7110

1)不必要的#include   會增加編譯時間. 

2)混亂隨意的#include可能導致迴圈#include,可能出現編譯錯誤.

可以宣告乙個類而不定義它。這個宣告,有時候被稱為前向宣告(forward declaration)。在宣告之後,定義之前,類screen是乙個不完全型別(incompete type),即已知screen是乙個型別,但不知道包含哪些成員。不完全型別只能以有限方式使用,不能定義該型別的物件,不完全型別只能用於定義指向該型別的指標及引用,或者用於宣告(而不是定義)使用該型別作為形參型別或返回型別的函式。

類的前向宣告之適用於指標和引用的定義,如果是普通類型別就得使用include了。

[cpp]view plain

copy

class

a;   

class

b   

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

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

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

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

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

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

[cpp]view plain

copy

class

string;  

class

sample  

;  

這裡只需要做乙個string的前向宣告就可以了,不需要#include (2)由於所有型別的指標也是相同大小的。所以與(1)類似,也可以只做前向宣告就好。

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

[cpp]view plain

copy

class

string;  

class

foo;  

class

sample  

;  

(4) 即使前向宣告乙個沒有定義的類,devc++也可以編譯通過,如下所示:

[cpp]view plain

copy

#include 

using

namespace

std;  

struct

b;  

class

foo;  

b func();  

class

a  ;  

class

b    

virtual

intadd()  

static

intc;  

};  

intmain()    

上面**也可以編譯執行,即使沒有看到class foo的定義;

c 中的前向宣告

前向宣告 可以宣告乙個類而不定義它。這個宣告,有時候被稱為前向宣告 forward declaration 在宣告之後,定義之前,類screen是乙個不完全型別 incompete type 即已知screen是乙個型別,但不知道包含哪些成員。不完全型別只能以有限方式使用,不能定義該型別的物件,不完...

C 中的前向宣告

前向宣告 可以宣告乙個類而不定義它。這個宣告,有時候被稱為前向宣告 forward declaration 在宣告之後,定義之前,類screen是乙個不完全型別 incompete type 即已知screen是乙個型別,但不知道包含哪些成員。不完全型別只能以有限方式使用,不能定義該型別的物件,不完...

C 中的前向宣告

1.前向宣告的好處 1 不必要的 include會增加編譯時間 2 混亂隨意的 include可能導致迴圈 include,可能會出現編譯錯誤 2.定義 可以宣告乙個類而不定義它。這個宣告有時候被成為前向宣告。不完全型別只能以有限方式使用,不能定義該型別的物件,不完全型別只能適用於 a.定義指向型別...