原创 《More Effective C++》重點摘要二:操作符

對定製的“類型轉換函數”警覺。兩種函數允許編譯器執行類型轉換:1)單變量constructors;2)隱式類型轉換操作符。第一種函數可以是明確只有一個單變量的constructor,也可以是擁有除第一個參數外其他參數有默認值的const

原创 每日一題24:堆

本文記錄了使用C++模板實現了堆的基本操作,對於其他一些有用操作如IncreaseKey和DecreaseKey等則沒有實現,這是因爲使用模板把最小堆和最大堆揉在一起,對Key的增減我還沒有找到比較好的處理方式,而現在寫這個堆數據結構主要

原创 C++多態的實現

C++的魔力 在C++中,通過繼承,子類可以獲得父類的成員,通過多態,C++可以實現在運行期根據對象的實際類型調用正確的虛函數,C++還有C語言不能做到的重載行爲…C++的這種魔力是怎麼實現的呢? 實際上,C++是使用C語言作爲代碼生成

原创 關於面向對象編程的一點思考

面向對象編程的對象有兩種,第一種是現實世界中的對象在軟件中的表示(暗含了類間的一部分關係,如包含等),另一種是爲了表示現實世界中對象之間相互作用而虛構起來的類(暗含了類間的另一部分關係,如協作等)。面向對象的思維有兩種突出表現形式,第一種

原创 《Effective C++》重點摘要(九)

《Effective C++》第九章:雜項討論 不要輕忽編譯器的警告。嚴肅對待編譯器發出的警告信息。努力在最高警告級別下爭取無警告。也不要過度依賴編譯器給出的警告信息,不同的編譯器給出的警告信息是不一樣的,甚至給出警告的點也不一樣。 讓

原创 《Effective C++》重點摘要(八)

《Effective C++》第八章:定製new和delete 瞭解new-handler的行爲。new和delete不是函數,是申請和釋放內存的操作符。當new提出獲得內存申請失敗時會發生什麼?老舊的編譯器是返回null指針。現在呢,

原创 《Effective C++》重點摘要(七)

《Effective C++》第七章:模板與泛型編程 瞭解隱式接口和編譯期多態。面向對象編程總是採用顯式地聲明一個接口,並在子類中提供特殊的實現,進而實現運行期多態。模板類中的接口往往是隱式的,隱式的意思是,編寫模板時,假設需要的接口類

原创 《More Effective C++》重點摘要一:基礎議題

仔細區別pointers和references。指針和引用有些相似,他們本身都是對存在於某個地方的對象(不是指class)的指示,但是他們有着本質的區別。指針變量存儲所指對象的地址,所指的對象可以是null,只要可以尋址就行。而引用是某

原创 《Effective C++》重點摘要(四)

《Effective C++》第四章:設計與聲明 讓接口容易被正確使用,不易被誤用。一個接口由返回類型、接口名稱、和參數列表組成,爲了讓接口容易被正確的使用,需要小心設計返回類型,最好是簡單、直接、自然。接口名稱選擇很重要,做到簡單、達

原创 寧以non-member且non-friend替換member函數

這樣做的第一個理由是增加封裝性,咳咳,這聽起來有點矛盾,因爲non-member且non-friend成員函數要想處理某個類中的數據的話,就得看到(即能訪問)該類中的數據,那麼數據就得是public的。這明顯破壞了封裝。嗯,解釋一下,不是