类设计者的核查表(转自C++rumination)
1。你的類需要一個構造函數么?
2。你的數據成員是私有的么?
感覺對于簡單的只是用于數據包裝的類不需要把數據成員設成私有,比如一個復數類。對于復雜類的狀態應該設成私有,只允許通過接口函數來更改和讀取成員。
?
3。你的類需要一個無參的構造函數么?
需要,(1).若無無參構造函數,則類似于Point p;的語法是非法的。(2)更重要的是無法生成該類對象的數組, Point pa[100]; //錯誤!!
?
4。是不是每個構造函數初始化所有的數據成員?
為了不導致未初始化錯誤,盡量初始化所有成員,但有些情況例外,比如只有對象存在一段時間之后其成員才有意義。
?
5。類需要析構函數么?
取決于該類是否分配了資源,而這些資源又不會被成員函數自動釋放。
?
6。類需要一個虛析構函數么?
虛析構函數是很有必要的的,當新類繼承此類之后,假如基類沒有虛析構函數,當基類指針指向派生類,析構時可能導致調用錯誤的析構函數。
?
7。你的類需要復制構造函數么?
同樣,取決于當類的構造函數分配資源,比如成員函數里有int *變量。。。
?
8。你的類需要一個賦值操作符么?
同7,一般需要復制構造函數就需要一個賦值操作符
?
9。你的賦值操作符能正確的將對象賦給對象本身么?
?
class String { public:String& operator=(const String& s);//... private:char* data; }; //錯誤實現,無法把對象賦給對象本身 String& String::operator =(const String &s) {delete[] data;data=new char[strlen(s.data)+1];strcpy(data,s.data);return *this; } //正確實現 String& String::operator =(const String &s) {if(&s!=this){delete[] data;data=new char[strlen(s.data)+1];strcpy(data,s.data);}return *this; }?
?
10。 你的類需要定義關系操作符么?
depends
?
11。 操作數組記住delete[]么?
?
12。記得在復制構造函數和賦值操作符的參數類型中加上const了么?
?
13。如果函數有引用參數,他們是const引用么?
總結
以上是生活随笔為你收集整理的类设计者的核查表(转自C++rumination)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 更改Gradle镜像下载地址
- 下一篇: 全面剖析ESP32创建Wi-Fi热点的过