1、添加
#ifndef _XXX_H_
#define _XXX_H_
.....
#endif
至頭文件,防止頭文件被重複引用而引起的重定義問題
2、#include<XXX.h>
將從標準庫目錄開始搜索
#include"XXX.h"
是從用戶工作目錄開始搜索
3、浮點數與0值比較:
無論float還是double變量,都有精度限制,不能直接用‘=’或者‘!=’來與數字比較,應該設法轉化爲“>=”或者“<=”形式。
eg:
if((x>=-EPSION) && (x<=EPSION))
//EPSION是精度,一般取0.000001
4、const與#define比較
C++語言可以用const來定義常量,也可以用#define來定義常量,但是前者有更多的優點
i、const有數據類型,編譯器可以對其進行類型安全檢查;#define沒有數據類型,只是在編譯時進行符號替換,因此也沒有數據類型安全檢查
ii、有些集成化的調試工具可以對const常量進行調試,但是不能對宏常量進行調試
5、如果參數是指針,且僅作輸入時使用,則應該類型前加上const,防止該指針在函數體內被隨意修改
6、如果函數輸入參數以值傳遞方式傳遞對象,則宜改爲“const &”方式來傳遞,這樣可以省去臨時對象的構造與析構過程,從而提高效率
7、防止內存耗盡
i、判斷指針爲空,則馬上return來終止函數:
void fun(void){
A *a = new A();
if(a==nullptr)return;
}
ii、判斷指針爲空,則馬上調用exit(1)來終止整個程序運行
void fun(void){
A *a = new A();
if(a==nullptr)exit(1);
}
8、重載、覆蓋與隱藏
i、成員函數被重載的特徵:
- 相同的範圍(在同一個類中)
- 函數名字相同
- 參數類型或(和)者個數不同
- virtual關鍵字可有可無
ii、成員函數被覆蓋的特徵
- 不同的範圍(分別位於派生類與基類)
- 函數的名字形同
- 參數形同
- 基類必須有virtual關鍵字
iii、隱藏規則
- 如果派生類的函數與積累的函數同名,但參數不同,此時,無論有無virtual關鍵字,基類的函數將被隱藏
- 如果派生類的函數與基類函數同名,且參數也相同,但是基類沒有virtual關鍵字,基類的函數將被隱藏