1.頭文件防衛(wèi)式聲明
方式1:
#ifndef XXX
#define XXX
? ? ? ? ? ? 代碼段
#endif
使用防衛(wèi)式聲明防止文件被重復(fù)包含,在VS下使用
方式2:
#pragma once
實(shí)現(xiàn),效果等同于方式1,但方式1可移植性更好。
2.Class的兩種經(jīng)典分類:
? ? ? ?class without pointer member
? ? ? ?class with pointer member
3.Class的聲明:
class xxx
{
public:
? ? ?外置API接口函數(shù),對類中對象的調(diào)用函數(shù)等
private:
? ? ?類的對象等
protected:
}
public,private,protected是訪問級別(access level),不同訪問級別有類與類,類與子類,類與類外函數(shù)之間有不同的訪問策略
4.inline(內(nèi)聯(lián)函數(shù))
使用inline內(nèi)聯(lián)聲明可以對編譯器提供建議,建議將此函數(shù)內(nèi)聯(lián)到class中,避免了編譯器運(yùn)行時(shí)去調(diào)用函數(shù),可以使程序速度更快。
但inline只是對編譯器建議,而是否內(nèi)聯(lián)取決于編譯器。函數(shù)中代碼越短內(nèi)聯(lián)的可能越高。
5.構(gòu)造函數(shù)
構(gòu)造函數(shù)與類同名,并且可以使用特殊的方式對對象初始化。
class complex
{
public:
? ? ? complex (double r = 0, double i = 0) : re (r), im(i) { ?} ? ? ? ? ? //使用特殊方式初始化,速度比re = i;更快
}
6.const
const 有許多不同的用法。
栗子1:
double real () const { return re; } ? ? ? ? ? ? ? ? ? ? ? ? //不能改變r(jià)e的值。當(dāng)re的值不改變時(shí)就加const。
為什么需要加const?
當(dāng)程序員使用const complex c1(5, 5);這樣子聲明一個(gè)對象時(shí),如果沒有const聲明而調(diào)用這個(gè)函數(shù)編譯器會認(rèn)為這個(gè)函數(shù)會改變類中對象(re, im)的值。
cout << c1.real(); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //編譯器會返回錯(cuò)誤
編譯器會返回錯(cuò)誤。所以這種寫法是更具考量的方式。
栗子2:
complex& operator += (const complex&); ? ? ? ? ? ? ? ? ? ?//如果complex的值不改變,使用const。
這樣子如果接受的一個(gè)const對象也不會發(fā)生錯(cuò)誤。
7.value VS reference
傳參: 大原則上使用reference傳參程序更快,而小原則上如果有小于4字節(jié)(char,bool等)的參數(shù),可以使用value。
返回值:
第一種是local object,使用value傳遞。
第二種不是local object,使用reference更快。
8.overloading重載
重載要求:函數(shù)名相同,參數(shù)不相同。