● 概述:以c++標(biāo)準(zhǔn)庫(kù)中的complex對(duì)象為例,介紹了成員無(wú)指針的類的基本寫法
● c++的歷史
○ 1.0:c++98
○ 2.0:c++11
● c++代碼的基本形式
○ 頭文件:1)用戶定義頭文件;2)標(biāo)準(zhǔn)庫(kù)
○ 用戶代碼
● 頭文件設(shè)計(jì)
○ 頭文件的防御式聲明:避免多次包含同一段代碼
■ #ifndef ... #endif
○ 頭文件的布局
■ 0:前置聲明
■ 1:類的聲明
■ 2:類的定義

● 類的聲明
○ 包括class head和class body:complex類的聲明如
○ 內(nèi)聯(lián)函數(shù)
■ 直接在類內(nèi)定義的函數(shù)為inline函數(shù)(當(dāng)然最終是否以inline形式展開取決于compiler)
■ 在類外部定義內(nèi)聯(lián)函數(shù):(函數(shù)返回值前加)inline
○ 私有成員和公有成員
■ 數(shù)據(jù):一般聲明為私有成員

● 構(gòu)造函數(shù)
○ 沒有返回值,與類同名
○ 初始化方式
■ 使用初始化列表,而不是在構(gòu)造函數(shù)中對(duì)私有成員賦值
○ 一般是公有成員,但也可以聲明為私有成員
■ Singleton設(shè)計(jì)模式
● 常成員函數(shù)
○ 函數(shù)聲明時(shí)加const關(guān)鍵字:明確表示不改變對(duì)象的數(shù)據(jù)
○ 常對(duì)象:const complex c1(2, 1) 只能調(diào)用常成員函數(shù),調(diào)用其他函數(shù)會(huì)報(bào)錯(cuò)(因?yàn)槠胀ê瘮?shù)有可能改變常對(duì)象的成員,這是矛盾的?。?/p>
● 設(shè)計(jì)函數(shù)時(shí):參數(shù)傳遞和返回值傳遞
○ 參數(shù)傳遞
■ 值傳遞:需要拷貝對(duì)象到棧
■ 引用傳遞:一般采用引用傳遞,速度快(只需要傳遞對(duì)象的地址)
○ 返回值
■ 一般返回引用
■ 但是局部對(duì)象不能返回引用(局部對(duì)象的生存期在返回語(yǔ)句之后結(jié)束)
● 友元
○ 類中,函數(shù)聲明時(shí)加 friend 關(guān)鍵字,函數(shù)定義時(shí)不需要加 friend關(guān)鍵字
○ 注意:相同class的object互為友元,于是有下邊的代碼

● 操作符重載:
○ 形式:例:inline complex& coplex::operator +=(const complex & x) {}
○ 返回值:可以是void,但不支持連續(xù)操作,比如c1+=c2+=c3;返回引用支持連續(xù)操作
○ 成員函數(shù):默認(rèn)使用this指針,指向operator的第一個(gè)對(duì)象
○ 如果操作數(shù)不是class的object
■ 使用非成員函數(shù)
○ 注意:一個(gè)有趣的用法,這些函數(shù)返回的是一個(gè)臨時(shí)的對(duì)象
■ 生成臨時(shí)對(duì)象的用法:typename(),比如int(7), complex(2,1)
■ return complex(real(x) +y, imag(x))
