一.頭文件與類的聲明
1.類的種類
1.1不帶指針的類complex類
object based:面向單一類的設(shè)計(jì)
1.2帶指針的類 ?string類
object oriented:面向多重類的設(shè)計(jì)
2.頭文件
1.防止頭文件被多次包含
使用#ifndef __XX__#define__XX__ (自己定義)#endif 表示如果未定義,則執(zhí)行下一步定義寸宵,
第二次包含時被定義過則跳過下面的內(nèi)容,就可以保證只會被定義一次,該頭文件就不會被包含兩次
3.采用模板減少重復(fù)代碼
template 使用同一份代碼
complex c1(2.5,1.5)
complex c2(2,1)
二、構(gòu)造函數(shù)(constructor ctor)
1.inline function :在class body內(nèi)定義询一,可提高函數(shù)運(yùn)行速度送滞,函數(shù)不可太復(fù)雜
2.訪問級別:public(對象可直接訪問)、private(對象不可直接訪問)
3.構(gòu)造函數(shù)(創(chuàng)建對象時調(diào)用)
3.1 可設(shè)置默認(rèn)實(shí)參
complex(double r = 0,double i = 0)
3.2 列表初始化
complex(double r = 0,double i = 0):re(r),im(i){} 列表初始化 為初始化翰撑,大括號內(nèi)為賦值,初始化效率更高
3.3 無返回值
3.4 構(gòu)造可有多個(重載)
3.5 ctors放在private區(qū)(如singleton設(shè)計(jì)模式)
三啊央、參數(shù)傳遞與返回值
1.常量成員函數(shù):double real()const{return re;}眶诈,作用:a.表示不改變數(shù)據(jù)內(nèi)容 b.可供常量對象調(diào)用,若函數(shù)不加const瓜饥,存在數(shù)據(jù)被修改的風(fēng)險(xiǎn)逝撬,所以常量對象無法調(diào)用
2.pass by value 傳遞整個值,數(shù)據(jù)量大時效率低
3.pass by reference 相當(dāng)于傳指針乓土,效率高宪潮,盡量傳引用,若不希望參數(shù)被修改趣苏,加const
4.return by value 返回函數(shù)內(nèi)部生成的local變量時只能return by value
5.return by reference 可以的情況盡量用return by reference狡相,返回局部變量時,不能使用return by reference
6.friend(友元)函數(shù)?可自由取得友元的private成員食磕,相同class的各個objects互為friends
四尽棕、操作符重載
1.以成員函數(shù)方式重載,所有成員函數(shù)帶有隱含參數(shù)this彬伦,this指向調(diào)用者
2.return by reference分析萄金,傳遞者無需知道接收者是以reference形式接收,重載操作符連串使用時需注意返回值媚朦,如c3 += c2 += c1,后面的結(jié)果在第二次+=時做右值氧敢,因此設(shè)計(jì)時返回值不能為void。
3.以非成員函數(shù)重載询张,區(qū)別孙乖,無this指針,臨時對象不可return by reference
4. ?ostream& operator << (ostream& os, const complex& x)
{
???? return os<< '(' <<real(x)<<','<<imag(x)<<')'<<endl;
}必須是全局函數(shù),參數(shù)1不能加const唯袄,os狀態(tài)會改變弯屈,返回值為ostream,為了可連續(xù)使用恋拷,可return by reference返回值不是local對象
總結(jié):
1.構(gòu)造函數(shù)使用列表初始化资厉;
2.函數(shù)要不要加const;
3.參數(shù)的傳遞盡量考慮pass by reference 且要不要加const蔬顾;
4.return by reference與return by value區(qū)別;
5.數(shù)據(jù)放private宴偿、函數(shù)放public