歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C++程序之前需要注意的事項

C++程序之前需要注意的事項

日期:2017/3/1 9:07:25   编辑:Linux編程

1.類設計核查表

類設計核查表出自《c++沉思錄》

  • 你的類需要構造函數嗎
  • 你的數據成員是私有的嗎
  • 你的類需要一個無參的構造函數嗎
  • 是不是每個構造函數初始化所有的數據成員
  • 類需要析構函數嗎
  • 你的類需要復制構造函數嗎
  • 你的類需要一個賦值運算符嗎
  • 你的賦值運算符能夠正確地將對象賦給對象本身嗎
  • 你的類需要定義關系操作符嗎
  • 刪除數組時你記住使用delete[]嗎
  • 記得在賦值構造函數和賦值操作的參數類型中加上const修飾符了嗎
  • 如果函數有引用參數,他們應該是const引用嗎

2.C++中的const和static

  • const在函數聲明之前代表什麼
const void testA(int a);//用const修飾這種返回值為void的函數,毫無意義
const int testB(int a){a += a+1; return a;}//按值返回一個編譯器內建類型,同樣毫無意義
//涉及到左值引用的部分,會在類中單獨說。
  • const在函數聲明之後代表什麼
//聲明一個成員函數為const,則等於告訴編譯器該成員函數可以為一個const對象所調用。
//一個沒有被聲明為const的成員函數被看成是將要修改對象中的數據成員,而且編譯器不允許被一個const對象所調用。
//一個成員函數調用const和非const對象是允許的
void className::test()const;//為保證函數不會修改調用對象
  • const在函數參數聲明中代表什麼
void testA(const int a){++a;}//按值傳遞毫無意義,編譯器會報錯。假使編譯器不報錯,這個函數執行完後,函數裡面的a就會被自動釋放
void testB(const int * a){++(*a);}//error,具體原因,參見const在指針的左右各代表著什麼
void testC(const int &a){a++;}//error
//將參數聲明成const,意味著const所修飾的那個參數,在函數中不能被修改.或者你可以根據其修飾的特點,來修改關於這個參數的其他意義。testB中,++(*a)會報錯,++a就不會報錯,為什麼?如果將testB 的參數修改成"int * const a"呢?這次又會是什麼來報錯呢?有沒有覺得,很有趣
  • const在指針的左右各代表著什麼,在引用中呢
//const只有兩個地方,一個在'*'號的後面,一個在'*'號的前面
//const修飾指針正指向的對象,const修飾在指針裡面存儲的地址
int testA = 10;
int testB = 30;
const int * ptrTestL = &testA ;
/*ptrTest 是一個指針,它指向一個const int。testA不是一個const int 類型。也就是說,編譯器通過ptrTestL = &testA 這樣一個活動,將*ptrTestL限制成了一個const int,但queue沒有將自動將testA強行修飾成一個const int。*/
*ptrTestL  = testB;//error,編譯器不允許這樣做。
ptrTestL  = &testB;//這樣做,改變的是ptrTestL的內容,而不是改變了ptrTestL所指向的內容。

int * const ptrTestR;//error
int * const ptrTestR = &testA;// ptrTestR 是一個指針,這個指針指向int的const指針。也就是我們常說的'常指針',聲明這樣一個指針,編譯器要求我們必須為其賦值。
*ptrTestR = testB;//OK
ptrTestR = &testB;//error由於ptrTestR 是一個常指針,這裡所說的常,指的是指針所指向的testA的地址,對於testA的內容,可以隨意修改。
//const 在引用裡面的作用和在指針中一樣。
  • const成員變量在什麼地方定義
//在一個類中建立一個普通const屬性時,不能對其進行直接賦值,賦值必須在構造函數中進行
//在類中定義一個const成員變量,用於頂替掉*'#defien'*
  • static
//在一個類中,將一個屬性聲明成static,意味著,不管類的對象被創建多少次,都只有一個實例,在類的外部進行定義,必須定義,否則會出現鏈接錯誤
//靜態成員函數不能訪問一般的數據成員,只能訪問靜態數據成員,也只能調用其他的靜態成員。通常,當前對象的地址(this)是被隱式地傳遞到被調用函數的,靜態函數成員沒有this
  • static const聲明的成員變量有什麼意義?在何處定義?
static const 成員變量,必須在其定義的地方對其進行初始化。以static const 修飾的成員變量,叫做"編譯期間的常量"

寫的有很多不足,畢竟水平有限,希望能幫助有需要的人。只是一篇文章而已,不喜勿噴。

Copyright © Linux教程網 All Rights Reserved