如何編寫一個不帶指針成員變量的類
關(guān)鍵點
- c和c++的不同
- c++中有對象的概念损合,每個對象中包含自己的數(shù)據(jù)和方法
- 頭文件中要進(jìn)行防衛(wèi)式聲明
- c++程序的基本形式
- 類頭文件滚澜,cpp文件娱颊,標(biāo)準(zhǔn)庫頭文件
- include<>引用標(biāo)準(zhǔn)庫頭文件拦耐,include""引用類頭文件
- 頭文件的布局
- 防衛(wèi)式聲明
#ifndef __MYCOMPLEX__
#define __MYCOMPLEX__
...
#endif //__MYCOMPLEX__
- 頭文件的布局
- 前置聲明
- 類聲明
- 類定義
- 內(nèi)聯(lián)函數(shù)
- 類聲明中定義的函數(shù)弯蚜,自動為inline十籍;但是函數(shù)是否真的為inline蛆封,由編譯器決定
- 函數(shù)前添加inline
- 類聲明中唇礁,數(shù)據(jù)和函數(shù)訪問權(quán)限關(guān)鍵字
- public
- private
- protected
- 在構(gòu)造函數(shù)的初值列中完成對類中數(shù)據(jù)的初始化操作,而不是在構(gòu)造函數(shù)體內(nèi)進(jìn)行賦值惨篱;默認(rèn)參數(shù)的設(shè)定
- c++的函數(shù)重載規(guī)則(overloading)
- 函數(shù)同名垒迂,但是編譯器中不同名
- 構(gòu)造函數(shù)常常有重載現(xiàn)象
- 重載函數(shù)的參數(shù)必須不同,默認(rèn)參數(shù)和沒有參數(shù)的情況不符合要求
- 構(gòu)造函數(shù)放在private中
- 單例模式Singleton
- const的使用
- const在函數(shù)體的大括號前妒蛇,表示不能改變函數(shù)體中任何數(shù)據(jù)
- 參數(shù)傳遞的兩種形式:pass by value && pass by reference (to const)
- pass by value:按傳遞參數(shù)的類型復(fù)制內(nèi)容机断,如果參數(shù)過大,會占用過多內(nèi)存
- pass by reference:只傳遞一個指針大小
- pass by reference時绣夺,如果不希望傳遞的參數(shù)被改變吏奸,需要在參數(shù)前增加const關(guān)鍵字
- 返回值傳的兩種形式:pass by value && pass by reference (to const)
- 參數(shù)和返回值的傳遞,盡量按照by reference(在情況允許時)
- 友元:可以訪問類的私有數(shù)據(jù)和方法
- 相同class的各個objects之間互為友元
- 一個好的類對象設(shè)計的幾個要素
- 類數(shù)據(jù)一定是private的
- 參數(shù)和返回值盡可能按照reference傳遞陶耍,視情況增加const
- 函數(shù)方法要考慮const的使用
- 構(gòu)造函數(shù)中的初始列中初始類數(shù)據(jù)
- 操作符重載
- 每個函數(shù)中都隱藏一個默認(rèn)函數(shù)奋蔚,this(類對象本身)
- 當(dāng)by reference傳遞時,傳遞者無需關(guān)注接收者是以reference形式接收
- 不建議操作符函數(shù)的返回值類型為void烈钞,因為可能會連續(xù)使用操作賦函數(shù)
c1 += c2 += c3;
- 成員函數(shù)
- 非成員函數(shù)
- 二元操作符和一元操作符
思考
- 多個類對象對應(yīng)多個類對象數(shù)據(jù)泊碑,卻都對應(yīng)同一份類函數(shù),如何實現(xiàn)毯欣?
- 何時不可以by reference傳遞返回值
- 當(dāng)返回值為local時馒过,函數(shù)的返回值不可以按照引用傳遞
- local的對象在函數(shù)執(zhí)行完畢后會被銷毀,如果傳遞引用會導(dǎo)致不可控的錯誤