c++中構(gòu)造函數(shù)和析構(gòu)函數(shù)_第1頁(yè)
c++中構(gòu)造函數(shù)和析構(gòu)函數(shù)_第2頁(yè)
c++中構(gòu)造函數(shù)和析構(gòu)函數(shù)_第3頁(yè)
c++中構(gòu)造函數(shù)和析構(gòu)函數(shù)_第4頁(yè)
c++中構(gòu)造函數(shù)和析構(gòu)函數(shù)_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、10.1 構(gòu)造函數(shù)構(gòu)造函數(shù)10.2 析構(gòu)函數(shù)析構(gòu)函數(shù)10.3 實(shí)現(xiàn)類型轉(zhuǎn)換和實(shí)現(xiàn)類型轉(zhuǎn)換和 拷貝的構(gòu)造函數(shù)拷貝的構(gòu)造函數(shù)10.4 構(gòu)造函數(shù)和對(duì)象成員構(gòu)造函數(shù)和對(duì)象成員第第10章章 構(gòu)造函數(shù)和析構(gòu)函數(shù)構(gòu)造函數(shù)和析構(gòu)函數(shù)給對(duì)象的數(shù)據(jù)成員賦值有二類(四種)方法:給對(duì)象的數(shù)據(jù)成員賦值有二類(四種)方法:1. 定義時(shí)賦值(初始化)定義時(shí)賦值(初始化)(1)用數(shù)據(jù)列表初始化(數(shù)據(jù)成員為公有訪問權(quán)限);)用數(shù)據(jù)列表初始化(數(shù)據(jù)成員為公有訪問權(quán)限);(2)用)用構(gòu)造函數(shù)構(gòu)造函數(shù)初始化。初始化。2. 定義后賦值定義后賦值(1)用成員函數(shù)賦值)用成員函數(shù)賦值-回顧第回顧第9章章示例示例3; (2)用同類型的對(duì)象賦

2、值。)用同類型的對(duì)象賦值。如:如:class A public: int a,b;void set(int x,int y)a=x;b=y; ; void main() A a1=5,10,a2,a3; a2.set(15,20); a3=a1;10.1 構(gòu)造函數(shù)構(gòu)造函數(shù)1. 構(gòu)造函數(shù)是實(shí)現(xiàn)數(shù)據(jù)成員初始化的特殊的構(gòu)造函數(shù)是實(shí)現(xiàn)數(shù)據(jù)成員初始化的特殊的成員函數(shù)成員函數(shù); 2. 構(gòu)造函數(shù)構(gòu)造函數(shù)與類同名與類同名,沒有類型沒有類型,也,也不返回值不返回值;3. 創(chuàng)建對(duì)象時(shí),構(gòu)造函數(shù)創(chuàng)建對(duì)象時(shí),構(gòu)造函數(shù)被自動(dòng)調(diào)用被自動(dòng)調(diào)用。每創(chuàng)建一個(gè)對(duì)象每創(chuàng)建一個(gè)對(duì)象都必須調(diào)用一次構(gòu)造函數(shù)都必須調(diào)用一次構(gòu)造函數(shù),每調(diào)用

3、一次構(gòu)造函數(shù)必定創(chuàng),每調(diào)用一次構(gòu)造函數(shù)必定創(chuàng)建一個(gè)對(duì)象。建一個(gè)對(duì)象。1. 普通構(gòu)造函數(shù):普通參數(shù);普通構(gòu)造函數(shù):普通參數(shù);2. 拷貝構(gòu)造函數(shù):參數(shù)為對(duì)象的引用??截悩?gòu)造函數(shù):參數(shù)為對(duì)象的引用。 一個(gè)類至少有上述兩個(gè)構(gòu)造函數(shù),可以有更多的構(gòu)造一個(gè)類至少有上述兩個(gè)構(gòu)造函數(shù),可以有更多的構(gòu)造函數(shù)(構(gòu)造函數(shù)允許函數(shù)(構(gòu)造函數(shù)允許重載重載),以實(shí)現(xiàn)不同形式對(duì)象的創(chuàng)),以實(shí)現(xiàn)不同形式對(duì)象的創(chuàng)建。建。 10.1 構(gòu)造函數(shù)構(gòu)造函數(shù)1. 類中定義格式類中定義格式 類名類名(形參列表)(形參列表) . /函數(shù)體,對(duì)數(shù)據(jù)成員賦值函數(shù)體,對(duì)數(shù)據(jù)成員賦值2. 類中說(shuō)明,類外定義類中說(shuō)明,類外定義(1) 類中說(shuō)明類中說(shuō)明

4、 類名類名(形參列表);(形參列表);(2)類外定義)類外定義 類名類名:類名類名(形參列表)(形參列表) . /函數(shù)體函數(shù)體10.1 構(gòu)造函數(shù)構(gòu)造函數(shù)例例10-1 定義表示平面點(diǎn)的類定義表示平面點(diǎn)的類Point及其構(gòu)造函數(shù)。及其構(gòu)造函數(shù)。 class Pointfloat x,y;public:Point(float a,float b);Point(float a) x=y=a;void print() cout(x,y“)n”; ; Point: Point(float a,float b) x=a; y=b; 10.1 構(gòu)造函數(shù)構(gòu)造函數(shù)建立對(duì)象時(shí),必須提供與構(gòu)造函數(shù)建立對(duì)象時(shí),必須提供

5、與構(gòu)造函數(shù)形參一致形參一致的的實(shí)參實(shí)參,其,其基本格式只有如下兩種形式:基本格式只有如下兩種形式:類名類名 對(duì)象名(實(shí)參)對(duì)象名(實(shí)參); 類名類名 對(duì)象名;對(duì)象名;例例10-2 用例用例10-1定義的類定義對(duì)象,并初始化。定義的類定義對(duì)象,并初始化。class Point float x,y;public: Point(float a,float b); Point(float a) x=y=a; void print() cout(x,y“)n”; ;Point: Point(float a,float b) x=a; y=b; void main() Point p1(5),p2(10,

6、15); p1.print();p2.print(); 10.1 構(gòu)造函數(shù)構(gòu)造函數(shù)主函數(shù)中,能否添加下列語(yǔ)句:主函數(shù)中,能否添加下列語(yǔ)句: Point p3;1. 缺省構(gòu)造函數(shù)的種類缺省構(gòu)造函數(shù)的種類(1)系統(tǒng))系統(tǒng)自動(dòng)產(chǎn)生自動(dòng)產(chǎn)生的構(gòu)造函數(shù),如下所示:的構(gòu)造函數(shù),如下所示: 類名()類名() (2)用戶定義的)用戶定義的沒有參數(shù)沒有參數(shù)的構(gòu)造函數(shù);的構(gòu)造函數(shù);(3)用戶定義的)用戶定義的所有參數(shù)都有缺省值所有參數(shù)都有缺省值的構(gòu)造函數(shù)。的構(gòu)造函數(shù)。2. 用缺省構(gòu)造函數(shù)創(chuàng)建對(duì)象的格式:用缺省構(gòu)造函數(shù)創(chuàng)建對(duì)象的格式:類名類名 對(duì)象名對(duì)象名;3. 使用時(shí)的注意使用時(shí)的注意(1)只有在用戶沒有定義構(gòu)造

7、函數(shù)時(shí),系統(tǒng)才自動(dòng)產(chǎn))只有在用戶沒有定義構(gòu)造函數(shù)時(shí),系統(tǒng)才自動(dòng)產(chǎn)生構(gòu)造函數(shù);生構(gòu)造函數(shù);(2)類中可能沒有缺省的構(gòu)造函數(shù);)類中可能沒有缺省的構(gòu)造函數(shù);(3)一個(gè)類最多只能有一個(gè)缺省的構(gòu)造函數(shù)。)一個(gè)類最多只能有一個(gè)缺省的構(gòu)造函數(shù)。10.1 構(gòu)造函數(shù)構(gòu)造函數(shù)例例10-3 缺省構(gòu)造函數(shù)的使用。缺省構(gòu)造函數(shù)的使用。class Pointfloat x,y;public:Point( ) x=0; y=0; Point(float a ,float b ) x=a; y=b; /Avoid print() cout(x,y“)n”; ;void main() Point p1 , p2(1,2);p

8、1.print(); p2.print(); 10.1 構(gòu)造函數(shù)構(gòu)造函數(shù)主函數(shù)能否增加:主函數(shù)能否增加:Point p3();p3.print();能否對(duì)能否對(duì)A行作如下修改?行作如下修改?=0 =01. 用用new運(yùn)行符產(chǎn)生動(dòng)態(tài)對(duì)象運(yùn)行符產(chǎn)生動(dòng)態(tài)對(duì)象(1)產(chǎn)生單個(gè)對(duì)象(可以初始化);)產(chǎn)生單個(gè)對(duì)象(可以初始化);(2)產(chǎn)生數(shù)組對(duì)象(不能初始化)。)產(chǎn)生數(shù)組對(duì)象(不能初始化)。如:如:class C float r,i;public: C (float r1 ,float i1) r=r1; i=i1; cout“構(gòu)造構(gòu)造n”; C () r=i=0; cout“缺省構(gòu)造缺省構(gòu)造n”; ;vo

9、id main() C *p1=new C,*p2=new C (2,-3), *p3=new C5; 10.1 構(gòu)造函數(shù)構(gòu)造函數(shù)2. 用用new為指針成員分配動(dòng)態(tài)空間為指針成員分配動(dòng)態(tài)空間 當(dāng)類的數(shù)據(jù)成員為指針時(shí),在構(gòu)造函數(shù)中應(yīng):當(dāng)類的數(shù)據(jù)成員為指針時(shí),在構(gòu)造函數(shù)中應(yīng): 先先用用new運(yùn)算符為指針動(dòng)態(tài)運(yùn)算符為指針動(dòng)態(tài)分配空間分配空間; 然后然后再對(duì)再對(duì)指針?biāo)钢羔標(biāo)缚臻g空間賦值。賦值。如:如: class Array int*p; .; /p表示表示10個(gè)元素的一維數(shù)組個(gè)元素的一維數(shù)組則如下的構(gòu)造函數(shù)都是錯(cuò)誤的:則如下的構(gòu)造函數(shù)都是錯(cuò)誤的:Array(int *t)p=t; Array (

10、int *t)*p=*t;Array (int *t)for(int i=0;i10;i+)pi=ti;Array (int *t)p=new int10; p=t; / *p=*t;正確的應(yīng)為:正確的應(yīng)為:Array (int *t) p=new int10; / 分配動(dòng)態(tài)空間分配動(dòng)態(tài)空間 for(int i=0;i10;i+)pi=ti; / 對(duì)動(dòng)態(tài)空間賦值對(duì)動(dòng)態(tài)空間賦值 10.1 構(gòu)造函數(shù)構(gòu)造函數(shù)1. 析構(gòu)函數(shù)的概念析構(gòu)函數(shù)的概念用于撤消對(duì)象的成員函數(shù)。用于撤消對(duì)象的成員函數(shù)。2. 定義格式定義格式(1)類中定義)類中定義 類名()類名() . /函數(shù)體函數(shù)體(2)類中說(shuō)明,類外定義)類

11、中說(shuō)明,類外定義 類中說(shuō)明類中說(shuō)明 類名();類名();/類中說(shuō)明類中說(shuō)明 類外定義類外定義 類名類名:類名()類名()/類外定義類外定義 . /函數(shù)體函數(shù)體10.2 析構(gòu)函數(shù)析構(gòu)函數(shù)3. 使用時(shí)注意:使用時(shí)注意:(1)析構(gòu)函數(shù)的名稱由運(yùn)算符)析構(gòu)函數(shù)的名稱由運(yùn)算符與類名組成;與類名組成;(2)析構(gòu)函數(shù)無(wú)函數(shù)類型,無(wú)參數(shù),且不返回值;)析構(gòu)函數(shù)無(wú)函數(shù)類型,無(wú)參數(shù),且不返回值;(3)析構(gòu)函數(shù)不可以重載,每個(gè)類只有一個(gè)析構(gòu)函數(shù);)析構(gòu)函數(shù)不可以重載,每個(gè)類只有一個(gè)析構(gòu)函數(shù);(4)類中通常不需要定義析構(gòu)函數(shù),而由系統(tǒng)自動(dòng)產(chǎn)生)類中通常不需要定義析構(gòu)函數(shù),而由系統(tǒng)自動(dòng)產(chǎn)生一個(gè)如下的缺省析構(gòu)函數(shù):一個(gè)如

12、下的缺省析構(gòu)函數(shù): 類名類名:類名()類名() (5)當(dāng)類中用)當(dāng)類中用new 運(yùn)算符分配了動(dòng)態(tài)空間時(shí),必須定義運(yùn)算符分配了動(dòng)態(tài)空間時(shí),必須定義析構(gòu)函數(shù),并在函數(shù)體中用析構(gòu)函數(shù),并在函數(shù)體中用delete運(yùn)算符釋放動(dòng)態(tài)空間。運(yùn)算符釋放動(dòng)態(tài)空間。4. 構(gòu)造函數(shù)與析構(gòu)函數(shù)的調(diào)用過(guò)程構(gòu)造函數(shù)與析構(gòu)函數(shù)的調(diào)用過(guò)程在創(chuàng)建對(duì)象時(shí),調(diào)用構(gòu)造函數(shù);在撤消對(duì)象時(shí),調(diào)用析在創(chuàng)建對(duì)象時(shí),調(diào)用構(gòu)造函數(shù);在撤消對(duì)象時(shí),調(diào)用析構(gòu)函數(shù);所以它們的調(diào)用過(guò)程(順序)通常是相反的。構(gòu)函數(shù);所以它們的調(diào)用過(guò)程(順序)通常是相反的。10.2 析構(gòu)函數(shù)析構(gòu)函數(shù) 當(dāng)一個(gè)對(duì)象被賦值為一個(gè)數(shù)字,如果這個(gè)數(shù)字可以放入某個(gè)構(gòu)當(dāng)一個(gè)對(duì)象被賦值為一

13、個(gè)數(shù)字,如果這個(gè)數(shù)字可以放入某個(gè)構(gòu)造函數(shù)實(shí)現(xiàn)對(duì)這個(gè)構(gòu)造函數(shù)的調(diào)用時(shí),則該賦值語(yǔ)句成立造函數(shù)實(shí)現(xiàn)對(duì)這個(gè)構(gòu)造函數(shù)的調(diào)用時(shí),則該賦值語(yǔ)句成立。其實(shí)質(zhì)。其實(shí)質(zhì)是以所給的數(shù)據(jù)為參數(shù)調(diào)用普通的構(gòu)造函數(shù)初始化對(duì)象,此時(shí)的構(gòu)是以所給的數(shù)據(jù)為參數(shù)調(diào)用普通的構(gòu)造函數(shù)初始化對(duì)象,此時(shí)的構(gòu)造函數(shù)稱為類型轉(zhuǎn)換的構(gòu)造函數(shù)。造函數(shù)稱為類型轉(zhuǎn)換的構(gòu)造函數(shù)。例例10-4 用類型轉(zhuǎn)換的構(gòu)造函數(shù)初始化對(duì)象。用類型轉(zhuǎn)換的構(gòu)造函數(shù)初始化對(duì)象。class Ex int x,y;public: Ex(int a, int b=10) x=a; y=b; cout“x=”x“,y=”y“n”; Ex() coutx“,釋放對(duì)象。釋放對(duì)象。n

14、”;void main() Ex e1(5); Ex e2=15; e1=20; cout“End.n”;10.3 實(shí)現(xiàn)類型轉(zhuǎn)換和拷貝的構(gòu)造函數(shù)實(shí)現(xiàn)類型轉(zhuǎn)換和拷貝的構(gòu)造函數(shù)其中:其中:Ex e2=15;等同于等同于Ex e2(15);e1=20;等同于等同于e1=Ex(20);x=5,y=10 x=15,y=10 x=20,y=1020,釋放對(duì)象。釋放對(duì)象。End.15,釋放對(duì)象。釋放對(duì)象。20,釋放對(duì)象。釋放對(duì)象。拷貝功能的構(gòu)造函數(shù)實(shí)現(xiàn):用一個(gè)已建立的對(duì)象初始化同類型的拷貝功能的構(gòu)造函數(shù)實(shí)現(xiàn):用一個(gè)已建立的對(duì)象初始化同類型的對(duì)象,其調(diào)用格式為:對(duì)象,其調(diào)用格式為:類名類名 新對(duì)象名(已建立對(duì)

15、象名)新對(duì)象名(已建立對(duì)象名); 或或類名類名 新對(duì)象名新對(duì)象名=已建立對(duì)象名已建立對(duì)象名; 例例10-5 用拷貝構(gòu)造函數(shù)初始化對(duì)象。用拷貝構(gòu)造函數(shù)初始化對(duì)象。class Ex int x,y;public: Ex(int a,int b) x=a; y=b; cout“x=”x“,y=”y“,普通構(gòu)造。普通構(gòu)造。n”; Ex(Ex &t)/拷貝功能的構(gòu)造函數(shù)拷貝功能的構(gòu)造函數(shù) x=t.x; y=t.y; cout“x=”x“,y=”y“,拷貝構(gòu)造??截悩?gòu)造。n”; ;void main() Ex e1(5,10); Ex e2(e1); Ex e3=e2; 10.3 實(shí)現(xiàn)類型轉(zhuǎn)換和拷

16、貝的構(gòu)造函數(shù)實(shí)現(xiàn)類型轉(zhuǎn)換和拷貝的構(gòu)造函數(shù)x=5,10, 普通構(gòu)造普通構(gòu)造x=5,10, 拷貝構(gòu)造拷貝構(gòu)造x=5,10, 拷貝構(gòu)造拷貝構(gòu)造l與普通構(gòu)造函數(shù)相似,若用戶不定義拷貝功能構(gòu)造函數(shù),系與普通構(gòu)造函數(shù)相似,若用戶不定義拷貝功能構(gòu)造函數(shù),系統(tǒng)自動(dòng)產(chǎn)生一個(gè)缺省的拷貝功能構(gòu)造函數(shù),它把已建立對(duì)象統(tǒng)自動(dòng)產(chǎn)生一個(gè)缺省的拷貝功能構(gòu)造函數(shù),它把已建立對(duì)象各數(shù)據(jù)成員的值依次賦給新對(duì)象。其定義如下:各數(shù)據(jù)成員的值依次賦給新對(duì)象。其定義如下: 類名類名:類名類名(類名類名 &對(duì)象名對(duì)象名) *this=對(duì)象名;對(duì)象名; l用戶通常可以直接使用缺省的拷貝功能構(gòu)造函數(shù),但在以下用戶通??梢灾苯邮褂萌笔〉目?/p>

17、貝功能構(gòu)造函數(shù),但在以下情況下必須重新定義:情況下必須重新定義:(1)新建對(duì)象與已建立對(duì)象的數(shù)據(jù)有差異;如)新建對(duì)象與已建立對(duì)象的數(shù)據(jù)有差異;如:Ex2 e2(e1); (2)數(shù)據(jù)成員中有指針,并使用了動(dòng)態(tài)內(nèi)存。)數(shù)據(jù)成員中有指針,并使用了動(dòng)態(tài)內(nèi)存。l類的構(gòu)造函數(shù)有兩類、多種形式,使用時(shí)應(yīng)加以區(qū)分。類的構(gòu)造函數(shù)有兩類、多種形式,使用時(shí)應(yīng)加以區(qū)分。10.3 實(shí)現(xiàn)類型轉(zhuǎn)換和拷貝的構(gòu)造函數(shù)實(shí)現(xiàn)類型轉(zhuǎn)換和拷貝的構(gòu)造函數(shù)例例10-6 用普通構(gòu)造函數(shù)和拷貝構(gòu)造函數(shù)創(chuàng)建對(duì)象。用普通構(gòu)造函數(shù)和拷貝構(gòu)造函數(shù)創(chuàng)建對(duì)象。class A public:A(int x=1)coutx“t”;A(A&t)cout

18、“拷貝拷貝t”;void main()A a1,a2(2),a3=3;coutn;A a4=A(4),a5=a1,a6(a1); coutn;a1=5;a2=a1; a3=A(0); coutn;10.3 實(shí)現(xiàn)類型轉(zhuǎn)換和拷貝的構(gòu)造函數(shù)實(shí)現(xiàn)類型轉(zhuǎn)換和拷貝的構(gòu)造函數(shù)運(yùn)行結(jié)果運(yùn)行結(jié)果: 1234 拷貝拷貝拷貝拷貝 拷貝拷貝50程序中共創(chuàng)建了幾個(gè)對(duì)象?程序中共創(chuàng)建了幾個(gè)對(duì)象? 1. 對(duì)象成員的概念對(duì)象成員的概念 類的類的數(shù)據(jù)成員數(shù)據(jù)成員為其他已定義類的為其他已定義類的對(duì)象對(duì)象,該成員稱為對(duì)象成員。,該成員稱為對(duì)象成員。 2. 初始化對(duì)象成員的方法初始化對(duì)象成員的方法 在構(gòu)造函數(shù)中以在構(gòu)造函數(shù)中以對(duì)象名

19、對(duì)象名調(diào)用調(diào)用對(duì)象所屬類的對(duì)象所屬類的構(gòu)造函數(shù)構(gòu)造函數(shù)完成,其基完成,其基本格式為:本格式為: 類名類名:類名類名(形參表形參表):對(duì)象名對(duì)象名(實(shí)參表實(shí)參表) /初始化普通成員初始化普通成員 3. 當(dāng)前對(duì)象在初始化(構(gòu)造函數(shù)調(diào)用)時(shí)的順序當(dāng)前對(duì)象在初始化(構(gòu)造函數(shù)調(diào)用)時(shí)的順序 (1)先完成)先完成對(duì)象對(duì)象成員成員的初始化,有多個(gè)對(duì)象成員時(shí),先說(shuō)明的的初始化,有多個(gè)對(duì)象成員時(shí),先說(shuō)明的先初始化;先初始化; (2) 再完成再完成普通普通成員成員的初始化。的初始化。 即先調(diào)用對(duì)象成員所屬類的構(gòu)造函數(shù),再執(zhí)行自身類的函數(shù)體。即先調(diào)用對(duì)象成員所屬類的構(gòu)造函數(shù),再執(zhí)行自身類的函數(shù)體。 4. 對(duì)象的撤消

20、(析構(gòu)函數(shù)調(diào)用)順序:與建立順序相反。對(duì)象的撤消(析構(gòu)函數(shù)調(diào)用)順序:與建立順序相反。10.4 構(gòu)造函數(shù)和對(duì)象成員構(gòu)造函數(shù)和對(duì)象成員例例10-7 含對(duì)象成員類的構(gòu)造函數(shù)。含對(duì)象成員類的構(gòu)造函數(shù)。class A int a;public: A(int x=0) a=x; cout“A()n”; A() couta“A()n”; ; class B int b;public: B(int x=0) b=x; cout“B()n”; B () coutb “B()n”; ; class C int c; B b1; A a1; B b2;public: C(int x,int y,int z):a1

21、(x),b1(y),b2(z) c=x+y+z; cout“C()n”; C() coutc “A()n”; ; void main() C c1(1,2,3); 10.4 構(gòu)造函數(shù)和對(duì)象成員構(gòu)造函數(shù)和對(duì)象成員對(duì)象說(shuō)明順序?qū)ο笳f(shuō)明順序決定構(gòu)造函數(shù)決定構(gòu)造函數(shù)調(diào)用順序調(diào)用順序?qū)ο笳{(diào)用構(gòu)造對(duì)象調(diào)用構(gòu)造函數(shù)語(yǔ)句決定函數(shù)語(yǔ)句決定對(duì)象成員的值對(duì)象成員的值一、選擇題一、選擇題1、以下有關(guān)析構(gòu)函數(shù)的敘述不正確的是、以下有關(guān)析構(gòu)函數(shù)的敘述不正確的是 。A、析構(gòu)函數(shù)沒有任何函數(shù)類型、析構(gòu)函數(shù)沒有任何函數(shù)類型B、析構(gòu)函數(shù)的作用是在撤銷對(duì)象時(shí)收回分配的內(nèi)存空間、析構(gòu)函數(shù)的作用是在撤銷對(duì)象時(shí)收回分配的內(nèi)存空間C、析構(gòu)

22、函數(shù)可以有形參、析構(gòu)函數(shù)可以有形參D、一個(gè)類只有一個(gè)析構(gòu)函數(shù)、一個(gè)類只有一個(gè)析構(gòu)函數(shù)2、關(guān)于類的缺省構(gòu)造函數(shù),下列說(shuō)法正確的是、關(guān)于類的缺省構(gòu)造函數(shù),下列說(shuō)法正確的是 。A、類的缺省構(gòu)造函數(shù)沒有參數(shù)、類的缺省構(gòu)造函數(shù)沒有參數(shù)B、類的缺省構(gòu)造函數(shù)是由系統(tǒng)自動(dòng)產(chǎn)生的空函數(shù)、類的缺省構(gòu)造函數(shù)是由系統(tǒng)自動(dòng)產(chǎn)生的空函數(shù)C、每個(gè)類均可定義缺省的構(gòu)造函數(shù)、每個(gè)類均可定義缺省的構(gòu)造函數(shù)D、每個(gè)類均有且有一個(gè)缺省的構(gòu)造函數(shù)、每個(gè)類均有且有一個(gè)缺省的構(gòu)造函數(shù)3、通??截惓跏蓟瘶?gòu)造函數(shù)的參數(shù)是、通??截惓跏蓟瘶?gòu)造函數(shù)的參數(shù)是 。A、某個(gè)對(duì)象的名稱、某個(gè)對(duì)象的名稱 B、某個(gè)對(duì)象的成員名、某個(gè)對(duì)象的成員名C、指向某個(gè)對(duì)

23、象的指針名、指向某個(gè)對(duì)象的指針名 D、某個(gè)對(duì)象的引用名、某個(gè)對(duì)象的引用名課堂練習(xí)課堂練習(xí)4、設(shè)有如下類的定義:、設(shè)有如下類的定義:class Ex int *p;public:Ex() delete p;Ex(int x=0)p=new int(x); ;則下列對(duì)象的定義中,不正確的是則下列對(duì)象的定義中,不正確的是 。A、Ex ex; B、Ex ex1(50),ex2=ex1;C、Ex ex=Ex(50); DEx ex=50;5、下列關(guān)于構(gòu)造函數(shù)說(shuō)法不正確的是、下列關(guān)于構(gòu)造函數(shù)說(shuō)法不正確的是 。A、構(gòu)造函數(shù)必須與類同名、構(gòu)造函數(shù)必須與類同名B、構(gòu)造函數(shù)可以省略不寫、構(gòu)造函數(shù)可以省略不寫C、構(gòu)

24、造函數(shù)必須有返回值、構(gòu)造函數(shù)必須有返回值D、在構(gòu)造函數(shù)中可以對(duì)類中的成員進(jìn)行初始化、在構(gòu)造函數(shù)中可以對(duì)類中的成員進(jìn)行初始化6、已定義類、已定義類A,該類構(gòu)造函數(shù)的參數(shù)都沒有缺省值,執(zhí)行語(yǔ)句:,該類構(gòu)造函數(shù)的參數(shù)都沒有缺省值,執(zhí)行語(yǔ)句:A a1(2),a2(1,2),*p=new A3;則自動(dòng)調(diào)用該類的缺省構(gòu)造函數(shù)的次數(shù)為則自動(dòng)調(diào)用該類的缺省構(gòu)造函數(shù)的次數(shù)為 。A、1 B、3 C、2 D、5課堂練習(xí)課堂練習(xí)7、下列程序中出現(xiàn)編譯錯(cuò)誤的是、下列程序中出現(xiàn)編譯錯(cuò)誤的是 。#include class Aint a,b;public:A(int x,int y) a=x;b=y;void print(

25、) coutatbprint(); /DA、A行行 B、B行行 C、C行行 D、D行行課堂練習(xí)課堂練習(xí)8、下列程序中不出現(xiàn)編譯錯(cuò)誤的是、下列程序中不出現(xiàn)編譯錯(cuò)誤的是 。class Aint a,b;A()a=10;b=20;public:A(int x) a=b=x;void main()A a1; / AA a2(1); / BA a3=1,2; / CA a4(1,2); / DA、A行行 B、B行行 C、C行行 D、D行行課堂練習(xí)課堂練習(xí)9、下面程序的運(yùn)行結(jié)果為、下面程序的運(yùn)行結(jié)果為 。 #includeclass Aint num;public:A(int i) num=i;A(A &

26、amp;a) num=a.num+;void print() coutnum;void main()A a(10),b(a);a.print(); b.print();coutendl;A、1010 B、1011 C、1111 D、1110課堂練習(xí)課堂練習(xí)二、填空題二、填空題1、執(zhí)行下列語(yǔ)句時(shí),系統(tǒng)自動(dòng)調(diào)用了構(gòu)造函數(shù)、執(zhí)行下列語(yǔ)句時(shí),系統(tǒng)自動(dòng)調(diào)用了構(gòu)造函數(shù) 次:次:Myclass p13,*p23,p3,*p4=p1,*p5=new Myclass; 2、當(dāng)類、當(dāng)類A的成員是類的成員是類B的對(duì)象時(shí),則把類的對(duì)象時(shí),則把類B中的類中的類A的對(duì)象稱的對(duì)象稱為為 成員。成員。 3、對(duì)象成員的初始化是

27、通過(guò)、對(duì)象成員的初始化是通過(guò) 調(diào)用調(diào)用 完成的。完成的。 4、缺省的一般構(gòu)造函數(shù),除了系統(tǒng)自動(dòng)生產(chǎn)的外,還有用戶、缺省的一般構(gòu)造函數(shù),除了系統(tǒng)自動(dòng)生產(chǎn)的外,還有用戶定義的定義的的構(gòu)造函數(shù)或的構(gòu)造函數(shù)或 的的構(gòu)造函數(shù)三種形式,但一個(gè)類中最多有構(gòu)造函數(shù)三種形式,但一個(gè)類中最多有 個(gè)缺省的一般個(gè)缺省的一般構(gòu)造函數(shù)。構(gòu)造函數(shù)。 5、以同類型的已有對(duì)象初始化新建對(duì)象時(shí),調(diào)用的構(gòu)造函數(shù)、以同類型的已有對(duì)象初始化新建對(duì)象時(shí),調(diào)用的構(gòu)造函數(shù)是是 ,使用時(shí)有兩種具體形式:,使用時(shí)有兩種具體形式:(1);(;(2)。課堂練習(xí)課堂練習(xí)6、下面程序段的執(zhí)行結(jié)果是、下面程序段的執(zhí)行結(jié)果是 。#include class

28、 Point int x,y; public:Point()x=y=0;Point(int a,int b)x=a;y=b;Point(Point &P);void show() coutx=x,y=yn; ;Point:Point(Point &P) x=P.x+10;y=P.y+10; void main()Point p1,p2(3,5),p3=p2;p1.show();p2.show();p3.show();課堂練習(xí)課堂練習(xí)7、下面程序段的執(zhí)行結(jié)果是、下面程序段的執(zhí)行結(jié)果是 。#include class Aint a;public:A(int x=0) a=x; co

29、utA()t;A() coutA()t; ;class Bint b;public:B(int x) b=x; coutB()t;B() coutB()t;class CB b1;A a1;public:C(int x,int y):a1(x),b1(y) coutC()t;C()coutC()t;void main()C c1(10,20); coutn;課堂練習(xí)課堂練習(xí)8、下列程序定義點(diǎn)類、下列程序定義點(diǎn)類Point和線段類和線段類Line,并求線段的長(zhǎng)度。完善程序。,并求線段的長(zhǎng)度。完善程序。程程序的運(yùn)行結(jié)果序的運(yùn)行結(jié)果 點(diǎn):點(diǎn):(1,3) 點(diǎn):點(diǎn):(2,4) 線段長(zhǎng)度為:線段長(zhǎng)度為:1

30、.41421#include #include class Pointint x;public:int y;Point(int=0,int=0);int getx()return x;void print() cout“點(diǎn):點(diǎn):(”x,y“)t”; ; x=a; y=b; class LinePoint p1,p2;public:Line(int a,int b,int c,int d):p1(a,c),p2(b,d) void show() p1.print(); p2.print(); double distance() double x= , y=p1.y-p2.y; return sq

31、rt(x*x+y*y); ;void main() Line l(1,2,3,4); l.show();cout“線段長(zhǎng)度為:線段長(zhǎng)度為:” n; 課堂練習(xí)課堂練習(xí)9、下列程序的運(yùn)行結(jié)果是、下列程序的運(yùn)行結(jié)果是 。#include class Aint a, b;public:A(int x, int y) a=x;b=y;void show( ) coutatbn; ;void main( ) A a13=A(1,2),A(3,4),A(5,6);a10.show( );a11.show( );a12.show( );課堂練習(xí)課堂練習(xí)三、程序設(shè)計(jì)題三、程序設(shè)計(jì)題練習(xí)練習(xí)1、定義一個(gè)類、定義一

32、個(gè)類Array,求一個(gè)二維數(shù)組各列元素的平均值,并,求一個(gè)二維數(shù)組各列元素的平均值,并將所求得的平均值按順序存入一個(gè)一維數(shù)組中,具體要求如下:將所求得的平均值按順序存入一個(gè)一維數(shù)組中,具體要求如下:(1)私有數(shù)據(jù)成員)私有數(shù)據(jù)成員 int a45; float b5; 數(shù)組數(shù)組b依次存放數(shù)組依次存放數(shù)組a的各列元素的平均值的各列元素的平均值(2)公有成員函數(shù))公有成員函數(shù) Array(int t5,int n):用數(shù)組:用數(shù)組t初始化數(shù)組初始化數(shù)組a(n為數(shù)組為數(shù)組t的行數(shù)),的行數(shù)),并將數(shù)組并將數(shù)組b的元素全部初始化為的元素全部初始化為0。 void average():計(jì)算數(shù)組:計(jì)算數(shù)組a的各列元素的平均值,并存放到數(shù)組的各列元素的平均值,并存放到數(shù)組b中。中。 void show():輸出所有成員數(shù)據(jù),二維數(shù)組必須按行列形式輸出。:

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論