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ù)养叛,對(duì)類中對(duì)象的調(diào)用函數(shù)等
private:
? ? ?類的對(duì)象等
protected:
}
public国裳,private鞠苟,protected是訪問級(jí)別(access level),不同訪問級(jí)別有類與類熔酷,類與子類孤紧,類與類外函數(shù)之間有不同的訪問策略
4.inline(內(nèi)聯(lián)函數(shù))
使用inline內(nèi)聯(lián)聲明可以對(duì)編譯器提供建議,建議將此函數(shù)內(nèi)聯(lián)到class中拒秘,避免了編譯器運(yùn)行時(shí)去調(diào)用函數(shù)号显,可以使程序速度更快。
但inline只是對(duì)編譯器建議躺酒,而是否內(nèi)聯(lián)取決于編譯器押蚤。函數(shù)中代碼越短內(nèi)聯(lián)的可能越高。
5.構(gòu)造函數(shù)
構(gòu)造函數(shù)與類同名羹应,并且可以使用特殊的方式對(duì)對(duì)象初始化揽碘。
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è)對(duì)象時(shí)掖桦,如果沒有const聲明而調(diào)用這個(gè)函數(shù)編譯器會(huì)認(rèn)為這個(gè)函數(shù)會(huì)改變類中對(duì)象(re, im)的值浑此。
cout << c1.real(); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //編譯器會(huì)返回錯(cuò)誤
編譯器會(huì)返回錯(cuò)誤。所以這種寫法是更具考量的方式滞详。
栗子2:
complex& operator += (const complex&); ? ? ? ? ? ? ? ? ? ?//如果complex的值不改變离咐,使用const暴凑。
這樣子如果接受的一個(gè)const對(duì)象也不會(huì)發(fā)生錯(cuò)誤悍缠。
7.value VS reference
傳參: 大原則上使用reference傳參程序更快鸦采,而小原則上如果有小于4字節(jié)(char,bool等)的參數(shù)枫攀,可以使用value庵楷。
返回值:
第一種是local object鸵赖,使用value傳遞抚恒。
第二種不是local object赫编,使用reference更快巡蘸。
8.overloading重載
重載要求:函數(shù)名相同,參數(shù)不相同擂送。