1,先看乙個例子:
class month
static const month feb()
...static const month dec()
int asint() const // for convenience, make
// it possible to convert
// a month to an int
private:
month(int number): monthnumber(number) {}
month(const month& rhs);
const int monthnumber;
};class date ;
設計理念:
第一:month建構函式私有,可以阻止clients產生新的月份.
第二:每個month object都是const,所以它們不可能被修改.
第三:獲得month object的唯一途徑呼叫函式,不用擔心month object沒有被初始化.
這個例子以"編譯期檢驗"取代了"執行期檢驗".
2,消除所有的執行時期檢驗是不切實際的,儘管如此,將執行時期的檢驗移到編譯期或連線期,還是乙個值得的目標.
條款41 了解隱式介面和編譯期多型
1 簡介 物件導向程式設計總是以顯式介面和執行期多型來解決問題。例如 class widget void doprocessing widget w 2 所謂的顯式介面 由於w的型別被宣告為widget,因此w需要widget介面,並且我們可以在原始碼中找到這個介面,看到原始碼的樣子,所以稱為是顯式...
Linux下面的編譯和連線
編譯和連線 編譯通常是對單個原始檔進行編譯成.o檔案 要加上 c選項,比如 gcc o aa.o c aa.cpp 否則會提示找不到main函式 因為有些模組只是提供單元函式 並沒有main函式 編譯只檢查基本語法,對於引用的外部函式,只用能找到其宣告就可以正確編譯通過,比如在cpp檔案中包含了引用...
程式的連線和編譯過程
連線 linking 是將各種 和資料片段收集並組合稱為乙個單一檔案的過程,這個檔案可被載入 複製 到記憶體並執行。在早期的計算機系統中,連線時手動執行的。在現代系統中,連線是由 叫做聯結器 linker 的程式自動執行的。main.c sum.c 大多數編譯系統提供編譯器驅動程式 compiler...