freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

第10章創(chuàng)建功能更強(qiáng)的類型(編輯修改稿)

2024-08-16 07:10 本頁面
 

【文章內(nèi)容簡(jiǎn)介】 。} 有了構(gòu)造函數(shù),就不需要 initialize函數(shù)了。以在定義時(shí)有 C++自動(dòng)完成初始化工作。 ? 定義對(duì)象時(shí),須指定構(gòu)造函數(shù)的實(shí)際參數(shù) DoubleArray array(20, 30)。 《 程序設(shè)計(jì) 》 程序設(shè)計(jì) 52 構(gòu)造函數(shù)實(shí)例 ? Rational類不一定要有構(gòu)造函數(shù),但習(xí)慣上應(yīng)改為每個(gè)類定義一個(gè)構(gòu)造函數(shù),以便在需要時(shí)對(duì)對(duì)象進(jìn)行初始化 ? Rational類構(gòu)造函數(shù)可定義為 Rational(int n1, int n2) { num = n1。 den = n2。 ReductFraction()。} ? 定義對(duì)象時(shí),須指定構(gòu)造函數(shù)的實(shí)際參數(shù)。例 Rational r(2, 7)。 《 程序設(shè)計(jì) 》 程序設(shè)計(jì) 53 構(gòu)造函數(shù)的使用 ? 有了構(gòu)造函數(shù)后,對(duì)象定義的一般形式為: 類名 對(duì)象名(實(shí)際參數(shù)表); 其中,實(shí)際參數(shù)表必須和該類的某一個(gè)構(gòu)造函數(shù)的形式參數(shù)表相對(duì)應(yīng)。 ? 除非這個(gè)類有一個(gè)構(gòu)造函數(shù)是沒有參數(shù)的,那么可以用: 類名 對(duì)象名; ? 不帶參數(shù)的構(gòu)造函數(shù)稱為默認(rèn)的構(gòu)造函數(shù)。 ? 一般每個(gè)類應(yīng)該有一個(gè)缺省的構(gòu)造函數(shù) 《 程序設(shè)計(jì) 》 程序設(shè)計(jì) 54 帶缺省值的 Rational類的構(gòu)造函數(shù) ? Rational(int n1 = 0, int n2 = 1) { num = n1。 den = n2。 ReductFraction()。 } ? 表示缺省情況下,構(gòu)造的是一個(gè)值為 0的有理數(shù)。此時(shí),定義 Rational r1(3,5), r2。 是正確的 《 程序設(shè)計(jì) 》 程序設(shè)計(jì) 55 動(dòng)態(tài)對(duì)象的初始化 ? 動(dòng)態(tài)變量的初始化是在類型后面用一個(gè)圓括號(hào)指出它的實(shí)際參數(shù)表 ? 如果要為一個(gè)動(dòng)態(tài)的 DoubleArray數(shù)組指定下標(biāo)范圍為 20到 30,可用下列語句: p = new DoubleArray(20, 30)。 ? 括號(hào)中的實(shí)際參數(shù)要和構(gòu)造函數(shù)的形式參數(shù)表相對(duì)應(yīng)。 《 程序設(shè)計(jì) 》 程序設(shè)計(jì) 56 初始化列表方法 ? 構(gòu)造函數(shù)還有一個(gè)與普通函數(shù)不同的地方,就是可以包含一個(gè)構(gòu)造函數(shù)初始化列表。 ? 構(gòu)造函數(shù)初始化列表位于函數(shù)頭和函數(shù)體之間。它以一個(gè)冒號(hào)開頭,接著是一個(gè)以逗號(hào)分隔的數(shù)據(jù)成員構(gòu)造列表 ? 如 DoubleArray的構(gòu)造函數(shù)可寫為 DoubleArray :: DoubleArray(int lh, int rh) : low(lh), high(rh) { storage = new double [high low + 1]。 } 《 程序設(shè)計(jì) 》 程序設(shè)計(jì) 57 為什么要使用初始化列表 ? 對(duì)象的構(gòu)造過程: ? 執(zhí)行每一個(gè)數(shù)據(jù)成員的構(gòu)造函數(shù)。如果成員沒有出現(xiàn)在初始化列表中,執(zhí)行默認(rèn)的構(gòu)造函數(shù),否則按初始化列表中列出的實(shí)際參數(shù)執(zhí)行對(duì)應(yīng)的構(gòu)造函數(shù) ? 執(zhí)行類的構(gòu)造函數(shù) ? 利用初始化列表可以提高構(gòu)造函數(shù)的效率。在初始化數(shù)據(jù)成員的同時(shí)完成了賦初始的工作。 我們完全可以在函數(shù)體內(nèi)對(duì)數(shù)據(jù)成員賦初值 ?。?! 《 程序設(shè)計(jì) 》 程序設(shè)計(jì) 58 重載構(gòu)造函數(shù) ? 構(gòu)造函數(shù)可以重載,導(dǎo)致對(duì)象可以有多種方式構(gòu)造 ? 試設(shè)計(jì)一個(gè)時(shí)間轉(zhuǎn)換器,用戶可輸入秒、分秒或時(shí)分秒輸出相應(yīng)的秒數(shù)。 《 程序設(shè)計(jì) 》 程序設(shè)計(jì) 59 時(shí)間轉(zhuǎn)換器的實(shí)現(xiàn) include iostream Using namespace std。 class timer{ int second。 public: timer(int t) { second = t。 } timer(int min, int sec) { second = 60 * min + sec。} timer(int h, int min, int sec) {second=sec+60*min+3600*h。} int gettime() { return second。 } } main() {timer a(20), b(1, 20), c(1, 1, 10)。 cout () endl。 cout () endl。 cout () endl。 } 《 程序設(shè)計(jì) 》 程序設(shè)計(jì) 60 析構(gòu)函數(shù) ? 析構(gòu)函數(shù)在撤銷對(duì)象時(shí),完成一些善后工作,由編譯系統(tǒng)自動(dòng)調(diào)用 ? 析構(gòu)函數(shù)與構(gòu)造函數(shù)名字相同,但它前面必須加一個(gè)波浪號(hào)( ~) ? 析構(gòu)函數(shù)沒有參數(shù),沒有返回值,也不能重載。 ? 若定義類時(shí)沒有定義析構(gòu)函數(shù),編譯系統(tǒng)會(huì)自動(dòng)生成一個(gè)缺省的空析構(gòu)函數(shù) 《 程序設(shè)計(jì) 》 程序設(shè)計(jì) 61 析構(gòu)函數(shù) ? 并不是每個(gè)類都必須要有析構(gòu)函數(shù),如Rational類就不需要析構(gòu)函數(shù)。 ? 一般在構(gòu)造函數(shù)中有動(dòng)態(tài)申請(qǐng)內(nèi)存的,必須有析構(gòu)函數(shù)。如 DoubleArray類,必須有析構(gòu)函數(shù)釋放 storage指向的空間。有了析構(gòu)函數(shù),就不需要 cleanup函數(shù)了 《 程序設(shè)計(jì) 》 程序設(shè)計(jì) 62 析構(gòu)函數(shù)舉例 class DoubleArray{ int low。 int high。 double *storage。 public: DoubleArray(int lh, int rh):low(lh), high(rh) { storage = new double [high low + 1]。 } bool insert(int index, double value)。 bool fatch(int index, double amp。value)。 ~DoubleArray() {delete [] storage。 } }。 《 程序設(shè)計(jì) 》 程序設(shè)計(jì) 63 DoubleArray類的使用 include iostream using namespace std。 include int main() { DoubleArray array(20,30)。 int i。 double value。 for (i=20。 i=30。 ++i) { cout 請(qǐng)輸入第 i 個(gè)元素 :。 cin value。 (i, value)。 } while (true) { cout 請(qǐng)輸入要查找的元素序號(hào)( 0表示結(jié)束) :。 cin i。 if (i == 0) break。 if ((i, value)) cout value endl。 else cout 下標(biāo)越界 \n。 } return 0。 } 《 程序設(shè)計(jì) 》 程序設(shè)計(jì) 64 拷貝構(gòu)造函數(shù) ? 在創(chuàng)建一個(gè)對(duì)象時(shí),可以用一個(gè)同類的對(duì)象對(duì)其初始化。這是需要調(diào)用一個(gè)特殊的構(gòu)造函數(shù),稱為拷貝構(gòu)造函數(shù)。 ? 拷貝構(gòu)造函數(shù)以一個(gè)同類對(duì)象引用作為參數(shù),它的原型為: 類名( const 類名 amp。); ? 用戶可以根據(jù)自己的需要定義拷貝構(gòu)造函數(shù) 《 程序設(shè)計(jì) 》 程序設(shè)計(jì) 65 缺省的拷貝構(gòu)造函數(shù) ? 如果用戶沒有定義拷貝構(gòu)造函數(shù),系統(tǒng)會(huì)定義一個(gè)缺省的拷貝構(gòu)造函數(shù)。該函數(shù)將已存在的對(duì)象原式原樣地復(fù)制給新成員 《 程序設(shè)計(jì) 》 程序設(shè)計(jì) 66 自定義拷貝構(gòu)造函數(shù) Classname(const classname amp。ob) {//…..} 例: Class point{ int x, y。 public: point(int a, int b) { x = a。 y = b。} point(const point amp。p) {x = 2 * 。 y = 2 * 。} } 《 程序設(shè)計(jì) 》 程序設(shè)計(jì) 67 何時(shí)需要自定義拷貝構(gòu)造函數(shù) ? 一般情況下,默認(rèn)的拷貝構(gòu)造函數(shù)足以滿足要求。 ? 但某些情況下可能需要設(shè)計(jì)自己的拷貝構(gòu)造函數(shù)。 ? 例如,我們希望對(duì) DoubleArray類增加一個(gè)功能,能夠定義一個(gè)和另一個(gè)數(shù)組完全一樣的數(shù)組。但默認(rèn)的拷貝構(gòu)造函數(shù)卻不能勝任。如果正在構(gòu)造的對(duì)象為 arr1,作為參數(shù)的對(duì)象是 arr2,調(diào)用默認(rèn)的拷貝構(gòu)造函數(shù)相當(dāng)于執(zhí)行下列操作: = 。 = 。 = 。 前兩個(gè)操作沒有問題,第三個(gè)操作中, storage是一個(gè)指針,第三個(gè)操作意味著使 arr1的 storage指針和 arr2的storage指針指向同一塊空間。 《 程序設(shè)計(jì) 》 程序設(shè)計(jì) 68 使用同一塊空間的問題 ? 一個(gè)對(duì)象的修改將會(huì)影響另一個(gè)對(duì)象 ? 如果兩個(gè)對(duì)象的作用域不同,當(dāng)一個(gè)對(duì)象析構(gòu)時(shí),另一個(gè)對(duì)象也將喪失它的空間 《 程序設(shè)計(jì) 》 程序設(shè)計(jì) 69 DoubleArray類的拷貝構(gòu)造函數(shù) DoubleArray(const DoubleArray amp。arr) { low = 。 high = 。 storage = new double [high – low + 1]。 for (int i = 0。 i high –low + 1。 ++i) storage[i] = [i]。 } 《 程序設(shè)計(jì) 》 程序設(shè)計(jì) 70 拷貝構(gòu)造函數(shù)的應(yīng)用場(chǎng)合 ? 對(duì)象定義時(shí) ? 函數(shù)調(diào)用時(shí),把對(duì)象作為參數(shù)傳給值傳遞的形式參數(shù) ? 把對(duì)象作為返回值時(shí) 《 程序設(shè)計(jì) 》 程序設(shè)計(jì) 71 對(duì)象定義時(shí) ? 將初始值放在圓括號(hào)中,直接調(diào)用與實(shí)參類型相匹配的構(gòu)造函數(shù)。如 DoubleArray array2(array1)。 ? 用“ =‖符號(hào) DoubleArray array = array1; 《 程序設(shè)計(jì) 》 程序設(shè)計(jì) 72 自定義拷貝構(gòu)造函數(shù)舉例 class point{ int x, y。 public: point(int a, int b){x=a。 y=b。} point(const point amp。p) {x=2*。 y=2*。} void print() {coutx yendl。} }。 void main() {point p1(10, 20), p2(p1), p3 = p1, p4(1, 2)。 ()。 ()。 ()。 ()。 p4 = p1。 ()。 } 10 20 20 40 20 40 1 2 10 20 《 程序設(shè)計(jì) 》 程序設(shè)計(jì) 73 把對(duì)象作為參數(shù)傳給函數(shù)時(shí) ? 如有函數(shù): void f(DoubleArray array)。 ? 函數(shù)調(diào)用 f(arr)。 將創(chuàng)建一個(gè)形式參數(shù)對(duì)象 array,并調(diào)用拷貝構(gòu)造函數(shù)用對(duì)象 arr初始化 array ? 注意:如果是引用傳遞就沒有這個(gè)構(gòu)造過程了 《 程序設(shè)計(jì) 》 程序設(shè)計(jì) 74 把對(duì)象作為返回值時(shí) ? 如有函數(shù) DoubleArray f() { DoubleArray a。 … return a。 } ? 當(dāng)執(zhí)行到 return語句時(shí),會(huì)創(chuàng)建一個(gè) DoubleArray類的臨時(shí)對(duì)象,并調(diào)用拷貝構(gòu)造函數(shù)用對(duì)象 a初始化該臨時(shí)對(duì)象,并將此臨時(shí)對(duì)象的值作為返回值。 《 程序設(shè)計(jì) 》 程序設(shè)計(jì) 75 類變量的生命周期 ? 與普通的內(nèi)置類型的變量完全相同 Time gTime; int main() { Time lTime1。 static Time sTime。 Time lTime2。 } 創(chuàng)建順序:遇到變量定義時(shí)調(diào)用構(gòu)造函數(shù)
點(diǎn)擊復(fù)制文檔內(nèi)容
醫(yī)療健康相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1