我們知道,當乙個原始檔所依賴的標頭檔案被修改時,這個原始檔需要被重新編譯(易碎的基類問題),為了能講述我將說明的這個方法,我們先來看看乙個簡單的例子,其**如下:
struct a
;class b
;#include "head.h"
#include b::b(int n)
void b::show()
b::~b()
#include #include "head.h"
using namespace std;
int main()
如果我們要修改結構體a,比如我們需要對a新增乙個成員變數,這時候head.h改變了,從而包含了它的head.cpp和main.cpp都需要重新編譯
我們知道類b是乙個包裝了類a的控制代碼類,對於這種形式,如何修改**使得修改a的定義時能減少重新編譯呢?
觀察head.h,我們發現在b的申明過程中並不需要完全定義類a,利用這點我們可以稍微修改下**,修改後的**如下:
class b
;#include "head.h"
#include struct b::a //a的完全定義
;b::b(int n)
void b::show()
b::~b()
#include #include "head.h"
using namespace std;
int main()
這樣修改後,如果我們需要修改a的定義,我們只需要修改head.cpp,從而可以避免main.cpp需要重新定義
總結:如果我們的系統中存在有控制代碼類,並且系統非常大,則我們可能需要這種所謂的奇技淫巧來避免編譯時間過多
C 中的控制代碼類
初次在 c primer 看到控制代碼,不是特別理解。在搜尋相關資料後,終於有了點頭緒。首先明白控制代碼要解決什麼問題。參考文章 c 沉思錄 閱讀筆記 類 場景 我們要把繼承類繫結到基類的例項物件中 該場景有兩個問題需要解決 記憶體分配和未知物件的繫結 有如下解決方案 直接複製繼承類物件到基類物件中...
MFC中獲得各個類的控制代碼的總結
1 在view中獲得doc指標 cyousdidoc pdoc getdocument 乙個視只能有乙個文件。3 在view中獲得mainframe指標 5 獲得當前文件指標 cdocument pcurrentdoc cframewnd m pmainwnd getactivedocument 6...
MFC中獲得各個類的控制代碼的總結
vc 獲取當前應用程式例項控制代碼的幾種方法 1.afxgetinstancehandle 用這個函式可以直接獲得應用程式的例項控制代碼 mfc中獲取各種類指標 獲取選單指標 cmenu pmenu afxgetmainwnd getmenu 獲取工具欄 狀態列指標 主框架中可以直接使用m wnd ...