前向聲明的定義:有些時候我們可以聲明一些類但是并不去定義它,當然這個類的作用也很有限了。
如:class A;
聲明一個foo類,這個聲明,有時候也叫做前向聲明(forward declaration),在聲明完這個foo類之后,定義完這個foo類之前的時期,foo類是一個不完全的類型(incomplete type),
也就是說foo類是一個類型,但是這個類型的一些性質(比如包含哪些成員,具有哪些操作)都不知道。
因此這個類的作用也很有限.
(1)不能定義foo類的對象。(不能)
(2)可以用于定義指向這個類型的指針或引用。(很有價值的東西)(能) ----- 因為所有類型的引用和指針都是4字節,嘻嘻。
(3)用于聲明(不是定義)使用該類型作為形參或者返回類型的函數。(能)
如:
class string;
class Sample
{
private:
string &s;
};
這里只需要做一個string的前向聲明就可以了,不需要#include <string>
這里,我根本沒有定義一個foo類,但是還是可以這樣用,因為成員函數不占類對象的大小,所以c++編譯器還是可以確定對象的大小。
前向聲明的作用在于告訴編譯器這個是一個在別的地方定義的類型。這樣C++編譯器就能生成正確的符號表了。編譯器只知道這是一個類?一個結構體?
但是在類實現文件還是要 include 聲明這個類的頭文件的