Effective C++ 讀書筆記----介面和類的設計
- 新型別的物件怎麼建立和銷燬。這關乎到建構函式和解構函式以及記憶體分配函式和釋放函式。
- 物件的初始化和物件的賦值有什麼樣的差別。這是建構函式和賦值函式需要考慮的問題。
- 新型別的物件如果被值傳遞,意味著什麼。拷貝建構函式用來定義設計的型別的值傳遞該如何實現。
- 什麼是新型別的合法值。在建構函式和賦值操作符中必須對值的合法性進行檢查。
- 新型別是否需要配合某個繼承體系。比如說,如果設計的類允許被繼承並且有可能被繼承,那麼應該將解構函式設定為虛擬函式。
- 新型別需要什麼樣的型別轉換。如果希望允許由型別T1被隱式轉換為型別T2,就必須在類T1中寫一個型別轉換函式(operator T2)或者在類T2中寫一個可被單一實參呼叫的建構函式。
- 什麼有的操作符和函式對新型別來說是合理的。也就是說怎麼設計類的成員函式。
- 誰能取用新型別的成員。即類成員應該宣告為public、protected、private還是friend。
- 什麼是新型別的“未宣告介面”。它對效率、異常安全性以及資源運用提供何保證。併為這些保證設定相應的約束條件。
- 是定義一個新型別還是定義一個模板型別。
- 是否真的需要定義一個這樣的型別。或許單純的定義一個函式或一個模板就能達到目標。
相關推薦
Effective C++ 讀書筆記----介面和類的設計
新型別的物件怎麼建立和銷燬。這關乎到建構函式和解構函式以及記憶體分配函式和釋放函式。 物件的初始化和物件的賦值有什麼樣的差別。這是建構函式和賦值函式需要考慮的問題。 新型別的物件如果被值傳遞,意味著什麼。拷貝建構函式用來定義設計的型別的值傳遞該如何實現。 什麼是新型別的合法值。在建構函式和賦值操作符中必須對值
Effective C++讀書筆記(七)設計與宣告部分(下)
Item22 將成員變數宣告為private 如果public介面內的每樣東西都是函式,客戶就不需要在打算訪問class成員時迷惑地試著記住是否該使用小括號。 細微的劃分訪問控制破有必要,因為許多成員變數應該被隱藏起來。 如果你通過函式訪問成員變數,日
Effective C++讀書筆記----自定義型別的傳參和返回值問題
對於自定義型別,傳參的時候儘可能的使用傳引用來代替傳值。 看如下這個例子: #include <iostream> using namespace std; #include <string> class Person {
effective C++ 讀書筆記 條款14 以對象管理資源
effect virt 什麽 con pin 構造 ostream pos sha 如果我們使用一個投資行為的程序庫: #include "stdafx.h" #include <iostream> #include <memory> using
effective C++ 讀書筆記 條款11
col tor 變量 pre amp 副本 swap 基本 目標 條款11: 在operator= 中處理“自我賦值” 在實現operator=時考慮自我賦值是必要的就像 x=y 。我們不知道變量x與y代表的值是否為同一個值(把x和y說成是一個指針更恰當一點)。例如
effective c++讀書筆記——用內聯模板函式替換類似函式的巨集定義
我們來看下面巨集定義: #define CALL_WITH_MAX(a, b) f((a) > (b) ? (a) : (b)) 這般長的巨集有著太多缺點,光是想到它們就讓人痛苦不堪。無論何時當你寫出這種
Effective C++讀書筆記---複製物件時勿忘每一個成員
核心點有兩個: 1、如果你堅持自己重寫拷貝建構函式,請記住:編譯器是不會提醒你是否少複製了某一個成員。 2、如果你重寫派生類的拷貝建構函式和拷貝操作符時,請記住:他們不會自動呼叫積累的拷貝建構函式和拷貝操作符。 以下為例子,注意手動呼叫基類的建構函式: class Pri
Effective C++讀書筆記之十二:複製物件時勿忘其每一個成分
class Date{...}; class Customer { public: ... private: std::string name; Date lastTransaction; }; class PriorityCustomer:public Customer { public: Pri
Effective C++讀書筆記----資源管理
C++中,我們自己申請的資源,需要我們手動的釋放。 有時候我們給了顯示釋放資源的語句,但是存在有些意外情況導致釋放語句沒能成功被執行。比如說在執行釋放語句前函式提前返回;假如釋放語句在一個迴圈內部,迴圈因為continue或者break提前結束;執行釋放語句之前程式拋異常了。 為了防止資源洩漏,請使用RAI
Effective C++讀書筆記----構造/析構/賦值運算
對於一個空類,編譯器會自動建立建構函式、拷貝建構函式、賦值運算子過載以及解構函式。(當然只有在這些函式在被呼叫的時候才會被編譯器創建出來)如果我們在類中顯示的聲明瞭這些函式,編譯器將不再自動生成這些函式。 當類的成員變數中有引用型別或者有const修飾,編譯器不會為該類生成賦值運算子過載函式,儘管該類並沒有
Effective C++讀書筆記---讓自己習慣C++
宣告式是告訴編譯器某個東西的名稱和型別。 簽名式是指引數和返回值。一個函式的簽名等同於該函式的型別(C++對簽名式的官方認定不包括返回值) 將函式宣告為 explicit ,可以阻止他們被用來執行隱式轉換,但他們仍可以用來進行顯式型別轉換 其他靜態成員只能在類裡邊進行宣告,類外進行初始化。格式為: 類域::
Effective C++讀書筆記(九)實現部分(下)
Item29 為“異常安全”而努力是值得的 “異常安全”有兩個條件 1)不洩露任何資源。 2)不允許資料敗壞。 例如下列程式碼: void PrettyMenu::changeBackground(std::istream& imgSr
Effective C++讀書筆記
但是,我們不該令拷貝賦值操作符呼叫拷貝建構函式,也不該令拷貝建構函式呼叫拷貝賦值操作符。想想,一個是拷貝(建立物件),一個是賦值(物件已經存在)。 請記住: Copying函式應該確保複製“物件內的所有成員變數”及“所有基類成員”; 不要嘗試以某個copying函式實現另一個copying函式
Effective Java (3rd Editin) 讀書筆記:3 類和介面
3 類和介面 Item 15:最小化類和成員的訪問許可權 一個設計優秀的類應該隱藏它的所有實現細節,將它的 API 和內部實現乾淨地分離開。這種軟體設計的基本準則被稱為“封裝”(encapsulation)。 封裝的優點: 組成系統的各元件之間解耦,使得它們能夠獨立地
CLR via C#讀書筆記 CLR寄宿和AppDomain
利用 create 控制 jmp 代理 情況 note 系統目錄 exce 寄宿 寄宿是指讓其他應用程序(非托管代碼)使用CLR的能力,比如自己用C++開發的窗體能創建CLR實例。 托管代碼也能調用非托管代碼 [DllImport("kernel32.d
【Effective Java讀書筆記】創建和銷毀對象(一):考慮使用靜態工廠方法代替構造器
返回對象 boolean 簡化 將不 其他 種類型 bigint color pre 類可以提供一個靜態方法,返回類的一個靜態實例,如Boolean包裝類的一個獲取實例的靜態方法 1 public static Boolean valueOf(boolean b) { 2
C#中的介面和抽象類學習
今天學習了介面和抽象類,但並沒有很好的進行整理,所以現在寫的時候,腦子裡多少有點亂亂的,先從介面開始吧。 interface 介面,規定了所有派生類的需要遵循的標準,介面定義了需要做些什麼,但是沒有具體的做法,做法的實現由派生類來做。 介面的定義使用關鍵字Interface,由於需要派生類繼承,所以
C++ primer讀書筆記 7.4 類的作用域
一個類就是一個作用域,在類的外部,成員的名字被隱藏起來了 在類的外部定義成員函式時, 要加上類名和作用域運算子 而一旦遇到了類名,定義的剩餘部分在就在類的作用域之內了。包含引數列表和函式體 另一方面,函式的返回型別通常出現在函式名之前,因此如果返回類型別,需要明確指出哪個類定義了該
Effective Java 讀書筆記(一):建立和銷燬物件
1 構造器 => 靜態工廠方法 (1)優勢 靜態工廠方法有名字 靜態工廠方法不必在每次被呼叫時都產生一個新的物件 靜態工廠方法能返回原返回型別的任意子型別的物件 靜態工廠方法根據呼叫時傳入的不同引數而返回不同類的物件 靜態工廠方法返回物件的類不需要存在(SPI架構) (2
effective java讀書筆記之 第一章 建立和銷燬物件
第一條: 考慮用靜態工廠方法代替構造器 1.與構造器不同的第一大優勢在於他們有名字,方便使用者呼叫,特別是對於引數各個不同的構造器相比,更為清楚. 2.不必在每次呼叫時都建立一個新的物件,可以為重複呼叫返回相同的物件,同時減少物件的重複建立,節省