原创 effective C++筆記之條款39: 避免“向下轉換”繼承層次

先看如下例子: class Person {…}; class BankAccount { public: BankAccount(const Person *primaryOwner, const Person *j

原创 effective C++筆記之條款34: 將文件間的編譯依賴性降至最低

1.    先看如下函數:class Person { public: Person(const sting& name, const Date& birthday, const Address& addr, const

原创 effective C++筆記之條款19:分清成員函數,非成員函數和友元函數

這是很重要的一個條款。 l        成員函數和非成員函數最大的區別在於成員函數可以是虛擬的而非成員函數不行。所以,如果有個函數必須進行動態綁定,而虛擬函數必定是某個類的成員函數。但如果函數不必是虛擬的,情況就稍微複雜一點。 l  

原创 effective C++筆記之條款33: 明智地使用內聯

  l        內聯函數的基本思想在於將每個函數調用以它的代碼體來代替。這種做法很可能會增加整個目標代碼的體積。在一臺內存有限的計算機裏,過份地使用內聯所產生的程序會因爲有太大的體積而導致可用空間不夠。過多的使用內聯還會降低指令高速

原创 effective C++筆記之條款23:必須返回一個對象時不要試圖返回一個引用

l        想要返回一個對象的引用時,重載乘號操作符容易犯以下幾個錯誤,: 1        返回一個局部對象的引用 2        在堆上創建一個對象,然後返回它的引用,無法去delete它,造成內存泄漏 3        返

原创 effective C++筆記之條款38: 絕不要重新定義繼承而來的缺省參數值

先看如下類層次結構 enum ShapeColor {RED, GREEN, BLUE}; class Shape { public: virtual void draw(ShapeColor color = RED

原创 effective C++筆記之條款22:儘量使用“傳引用”而不用“傳值”

l        通過值來傳遞一個對象的具體含義是由這個對象的類的拷貝構造函數定義的。這使得傳值成爲一種非常昂貴的操作。爲避免這種潛在的昂貴的開銷,就不要通過值來傳遞對象,而要通過引用。這會非常高效,因爲沒有新的對象被創建。而且避免了

原创 effective C++筆記之條款27:如果不想使用隱式生成的函數就要顯示地禁止它

l        習慣應該堅持下去,不管今天是什麼日子。來自3月17日晚上9點半的總結。 l        比如類模板Array,它所生成的類除了可以進行上下限檢查外,其他行爲和C++標準數組一樣,但標準的數組是不允許數組間賦值的。設計中

原创 effective C++筆記之條款18:爭取使類的接口完整並且最小

l        類的用戶接口是指使用這個類的程序員所能訪問得到的接口。典型的接口裏只有函數存在,因爲在用戶接口裏放上數據成員會有很多缺點。 l        一個完整的接口是指那些允許用戶做他們想做的任何合理的事情的接口。 l     

原创 effective C++筆記之條款35: 使公有繼承體現“是一個”的含義

D (Derived)公有繼承於B(Base),實際上是:類型D的每一個對象也是類型B的一個對象,但反之不成立;B是一個比D更廣泛的概念,D表示一個比B更特定概念;是在聲明:任何可以使用類型B的對象的地方,類型D的對象也可以使用,因爲每個

原创 effective C++筆記之條款40: 通過分層來體現“有一個”或“用…來實現”

分層:使某個類的對象成爲另一個類的數據成員,從而實現將一個類構築在另一個類之上,這一過程稱爲“分層”。公有繼承的含義是“是一個”。對應地,分層的含義是“有一個”或“用…來實現”。Person對象“有一個”名字,地址,電話號碼和傳真號碼

原创 effective C++筆記之條款28: 劃分全局名字空間

l        全局空間最大的問題在於它本身僅有一個。在大的軟件項目中,經常會有不少人把他們的定義放在這個單一的名字空間中,從而不可避免地導致名字衝突。 l        解決方法: 可以在全局符號前加上一些不大可能造成衝突的前綴。

原创 effective C++筆記之條款31、32: 千萬不要返回局部對象的引用,也不要返回函數內部用new初始化的指針所指對象的引用、儘可能地推遲變量的定義

條款31: 千萬不要返回局部對象的引用,也不要返回函數內部用new初始化的指針所指對象的引用。 l        返回一個局部對象的引用。局部對象在被定義時創建,在離開函數體時被銷燬。當函數返回時,程序的控制離開了這個空間,所以函數內部所

原创 effective C++筆記之條款26:當心潛在的二義性

三種可能的情況 1.類中構造函數與重載轉換運算符間的二義性,如下所示: class B; class A { public: A(const B& b) { cout << "A()" << endl; } private: in

原创 effective C++筆記之條款17: 在operator=中檢查給自己賦值的情況

l        注意別名:同一個對象有兩個以上的名字。別名可以以大量任意形式的僞裝出現,所以在寫函數時一定要考慮到它。 l        在賦值運算符要特別注意可能出現的別名的情況,有兩個理由: 1.        效率。如果可以在賦值