c++中的前向聲明用法解讀
更新時間:2023年06月12日 08:36:40 作者:和大黃
這篇文章主要介紹了c++中的前向聲明用法解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
c++前向聲明用法
前向聲明
可以聲明一個類而不定義它。這個聲明,有時候被稱為前向聲明(forward declaration)。
在聲明之后,定義之前,類Screen是一個不完全類型(incompete type),即已知Screen是一個類型,但不知道包含哪些成員。
不完全類型只能以有限方式使用,不能定義該類型的對象,不完全類型只能用于定義指向該類型的指針及引用,或者用于聲明(而不是定義)使用該類型作為形參類型或返回類型的函數(shù)。
類的前向聲明之適用于指針和引用的定義,如果是普通類類型就得使用include了。
class A; class B { ? public: ? A* m_a; //(不能A m_a) } #include "A.h" class B { ? public: ? A* m_a; //(或者A m_a) }
前向聲明好處是
不必要的#include 會增加編譯時間.
混亂隨意的#include可能導致循環(huán)#include,可能出現(xiàn)編譯錯誤.
C++前向聲明注意事項
typedef struct tag_guid { ?? ?ULONGLONG utime; ?? ?ULONGLONG umac; }tpguid; class A { private: ?? ?int m_teset1; }; //其他文件中的前向聲明,注意結(jié)構(gòu)體和類的區(qū)別 typedef struct tag_guid tpguid; class A; //使用,注意使用前向聲明的成員必須是指針 class B { private: ?? ?tpguid* ? ?m_guid; ?? ?A* ? ? ? ? m_a; };
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。