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.定義指向型別...