本份部落格內容很簡單,主要研究#include語句中,引用標頭檔案時使用《和"的區別以及歸納namespace關鍵字的用法及為什麼要使用前置宣告。
以下為給出的研究結果:
#include<> 引用的是編譯器的類庫路徑裡面的標頭檔案。
#include"" 引用的是你程式目錄的相對路徑中的標頭檔案.
命名空間是用來阻止和重用**的,因為不能排除變數名即識別符號相同的情況,對於庫來說,這個問題尤為嚴重。為了解決這個問題,引入了命名空間這個概念。這樣當物件來自不同的地方但是名字相同的時候就不會含糊不清了,是一種將程式庫名稱封裝起來的方法,它就像在各個程式中立起來一道道圍牆。由於namespace的概念,使用c++標準程式的任何識別符號時,可以有三種選擇:1.直接指定識別符號。2使用using關鍵字。3.使用using namespace std;
使用前置宣告的原因總結來說有以下幾點:
一、降低模組的耦合。因為隱藏了類的實現,被隱藏的類相當於原類不可見,對隱藏
類進行修改,不需要重新編譯原類。
二、降低編譯依賴,提高編譯速度。指標的大小為(32位)或8(64位),x發生變化,指標大小卻不會改變,檔案c.h也不需要重編譯。
三、介面與實現分離,提高介面的穩定性。
四、通過指標封裝,當定義「new c」或"cc1"時 ,編譯器生成的**中不會摻雜x的任何資訊。
五、當使用c時,使用的是c的介面(c介面裡面操作的類其實是pimpl成員指向的x物件),與x無關,x被通過指標封裝徹底的與實現分離。
再者,通過**驗證:類a中用到了類b,而類b的宣告出現在類a的後面。如果沒有類b的前置說明,下面的程式將不同通過編譯,編譯器將會給出類似「缺少型別說明符」這樣的出錯提示
#include
using namespace std;
class b;// 這是前置宣告(forward declaration)
class a
private:
b* b;
public:
a(b* b):b(b)
class b
// main.cpp
#include "forwarddeclaration.h"
int main(int argc, char** argv)
b* b = new b();
a* a = new a(b);
delete a;
delete b;
return 0;
}
Windows下DLL程式設計技術及應用
一 引 言 由於windows為微機提供了前所未有的標準使用者介面 圖形處理能力和簡單靈便的操作,絕大多數程式編制人員都已轉向或正在轉向windows程式設計。在許多使用者設計的實際應用系統的程式設計任務中,常常要實現軟體對硬體資源和記憶體資源的訪問,例如埠i o dma 中斷 直接記憶體訪問等等。...
Nios Flash程式設計技術
1.1 altera支援cfi flash程式設計 1.3 非支援cfi程式設計 由於我所用的nor flash晶元是am29lv320db,不再nios支援的列表,自己編輯了override檔案,但還是無法正確program進去,決定用列表支援的sst39vf800試一試,引腳相容,容量為1 4,...
DLL程式設計技術
一 dll原理 dll dynamic link library 也就是 動態鏈結庫 是乙個可以被其它應用程式共享的程式模組,其中封裝了一些可以被共享的程式或資源。它雖然包含了可執行 卻不能單獨執行,而應由相應的應用程式直接或間接呼叫。在 windows 32 中,可以將 dll 標記為共享以導致相...