計(jì)算機(jī)第十章構(gòu)造函數(shù)和析構(gòu)函數(shù)_第1頁(yè)
計(jì)算機(jī)第十章構(gòu)造函數(shù)和析構(gòu)函數(shù)_第2頁(yè)
計(jì)算機(jī)第十章構(gòu)造函數(shù)和析構(gòu)函數(shù)_第3頁(yè)
計(jì)算機(jī)第十章構(gòu)造函數(shù)和析構(gòu)函數(shù)_第4頁(yè)
計(jì)算機(jī)第十章構(gòu)造函數(shù)和析構(gòu)函數(shù)_第5頁(yè)
已閱讀5頁(yè),還剩54頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

構(gòu)

數(shù)第

構(gòu)

數(shù)Q章

1

JIANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

翁羸需象的方法

VC++中初始化對(duì)象有三種方法:

(1)用初始化列表。這種方法只適用于成員全為公有

的,當(dāng)成員有私有或派生時(shí)不可使用。如:

classPoint{

public:

intx,y;

intGetX(){returnx;}

intGetY(){returny;}

voidSetXY(int,int);

voidprintXY(){cout?x?J\f;cout?y?,\n,;}

}P={3,9},Q;

2012-10-232

JIANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

山數(shù)為X」次初始化。如:

#include<iostream.h>

classA{

private:

inti;

public:

voidinit(inta){i=a;}

voidPrint(){cout?i?endl;}

};

voidmain(){

Aobj;

obj.init(12);obj.Print();

)

這種方法主要有兩個(gè)缺點(diǎn),即增加了程序的復(fù)雜程度,

并且容易遺漏初始化操作,被遺漏的對(duì)象將毫無(wú)意義。

2012-10-233

1IANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

(3)用構(gòu)造函數(shù)初始化。

(4)用完成拷貝功能的構(gòu)造函數(shù)初始化。

2012-10-234

JIANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

1、構(gòu)造函數(shù)的定義

構(gòu)造函數(shù)是一種特殊的初始化類(lèi)的成員函數(shù)。

當(dāng)對(duì)象被創(chuàng)建時(shí),構(gòu)造函數(shù)自動(dòng)被調(diào)用。

使用構(gòu)造函數(shù)可方便編程,簡(jiǎn)化程序代碼O

構(gòu)造函數(shù)定義的一般格式如下:

類(lèi)名::類(lèi)名(形參表){

函數(shù)體

}

構(gòu)造函數(shù)的特點(diǎn):函數(shù)的名字與類(lèi)名相同,

,沒(méi)有返回類(lèi)型和返回值。5

1IANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

任務(wù):定義類(lèi)Point的構(gòu)造函數(shù)。

classPoint{

intx,y;

public:

Point(inta,intb){x=a;y=b;}〃構(gòu)造函數(shù)

intGetX(){returnx;}

intGetY(){returny;}

voidSetXY(inta,intb){x=a;y=b;}

voidprintXY()

{coutvvxvv'\t';coutvvyvv'\rT;}

);

2012-10-236

1IANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

我們也可以在類(lèi)外定義構(gòu)造函數(shù):

Point::Point(inta,intb)

x=a;

y=b;

)

2012-10-237

JIANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

2、缺省的構(gòu)造函數(shù)

每個(gè)類(lèi)均有構(gòu)造函數(shù),如果不定義構(gòu)造函數(shù),編譯器

會(huì)自動(dòng)產(chǎn)生一個(gè)公共的默認(rèn)構(gòu)造函數(shù),這個(gè)構(gòu)造函

數(shù)什么都不做。如果至少提供一個(gè)構(gòu)造函數(shù),則編

譯器就不會(huì)產(chǎn)生默認(rèn)構(gòu)造函數(shù)。

缺省構(gòu)造函數(shù)的形式為:

類(lèi)名::類(lèi)名(){}

若顯式定義了構(gòu)造函數(shù),則缺省的構(gòu)造函數(shù)自動(dòng)消失。

構(gòu)造函數(shù)可以缺省參數(shù),默認(rèn)構(gòu)造函數(shù)與缺省參數(shù)的

構(gòu)造函數(shù)統(tǒng)稱(chēng)為缺省的構(gòu)造函數(shù)。

2012-10-23

JIANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

3、構(gòu)造函數(shù)的使用

?構(gòu)造函數(shù)不需要人為調(diào)用,定義對(duì)象時(shí)系統(tǒng)

自動(dòng)調(diào)用并初始化對(duì)象。定義對(duì)象的一般格

式為:

類(lèi)名對(duì)象名(實(shí)參表);

如:PointS(2,3);定義了Point的一個(gè)對(duì)象S,并

自動(dòng)調(diào)用構(gòu)造函數(shù)為其賦初值。

2012-10-239

JIANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

任務(wù)與算法分析:

(1)定義含構(gòu)造函數(shù)的類(lèi)Point;

(2)在主函數(shù)中定義對(duì)象,調(diào)用對(duì)象的成員函數(shù)。

#include<iostream.h>

classPoint{

intx,y;

public:

Point(inta=0,intb=0){x=a;y=b;}〃構(gòu)造函數(shù)

intGetX(){returnx;}

intGetY(){returny;}

voidSetXY(int,int);

voidprintXY(){cout?x?5\t5;cout?y?5\n,;}

);

2012-10-2310

JIANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

voidPoint::SetXY(intajntb){

x=a;y=b;

)

voidmain(){

Pointp1(1,2);

IIp1對(duì)象的x和y的初值分別為1和2

Pointp2;

〃p2對(duì)象的x和y的初值均為0

cout?p1.GetX()?5\t5?p1.GetY()?,\n,;

p2.printXY();

)輸出:12

00

2012-10-2311

JIANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

4、構(gòu)造函數(shù)的重載

一個(gè)類(lèi)中可以有多個(gè)構(gòu)造函數(shù)。這些構(gòu)造函

數(shù)必須具有不同的參數(shù)表。在一個(gè)類(lèi)中需要

接受不同初始化值時(shí),就需要編寫(xiě)多個(gè)構(gòu)造

函數(shù),即實(shí)現(xiàn)重載。創(chuàng)建Point對(duì)象時(shí),自動(dòng)

調(diào)用相應(yīng)的構(gòu)造函數(shù)。

2012-10-2312

JIANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

造函數(shù)重載舉例。

任務(wù):

(1)定義類(lèi)Point;

(2)在類(lèi)Point中定義重載的構(gòu)造函數(shù)。

#include<iostream.h>

classPoint{

intx,y;

public:

Point(inta,intb){x=a;y=b;}

Point(float,float);//極坐標(biāo)

Point(void){x=y=0;}

voidprintXY(){cout?x?,\f;cout?y?,\n,;}

^12-10-23

13

1IANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

Point::Point(floatlen,floatangle){〃極坐標(biāo)

x=(int)(len*cos(angle));

y=(int)(len*sin(angle));

)

voidmain(){

PointP(10,20);〃笛卡兒坐標(biāo)

PointQ(2.0f,3.14f);II極坐標(biāo)

PointR;//A

P.printXY();

Q.printXY();

R.printXY();

)

2012-10-2314

JIANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

1史用懼迎數(shù)的幾點(diǎn)說(shuō)明:

(1)每個(gè)對(duì)象必須有一個(gè)構(gòu)造函數(shù)與其對(duì)應(yīng)。如:

classPoint{

intx,y;

public:

Point(inta,intb){x=a;y=b;}

);

voidmain(){

Pointp1(12);〃錯(cuò)誤

)

2012-10-2315

1IANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

曷須有唯一一個(gè)構(gòu)造函數(shù)與其對(duì)應(yīng)。如:

classPoint{

intx,y;

public:

Point(inta,intb=O){x=a;y=b;}

Point(inta){x=a;y=10;}

);

voidmain(){

Pointp1(12);〃錯(cuò)誤

)

2012-10-2316

1IANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

(3)當(dāng)對(duì)象調(diào)用缺省參數(shù)的構(gòu)造函數(shù)時(shí),對(duì)象后的

括號(hào)不能有,否則作為函數(shù)聲明。如:

classPoint{

intx,y;

public:

Point(inta=0,intb=O){x=a;y=b;}

);

voidmain(){

Pointp1();〃錯(cuò)誤

)

2012-10-2317

JIANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

5、new運(yùn)算符與構(gòu)造函數(shù)

用new運(yùn)算符可動(dòng)態(tài)創(chuàng)建對(duì)象,此時(shí)自動(dòng)調(diào)

用構(gòu)造函數(shù)來(lái)完成對(duì)象的初始化。如:

Point*p=newPoint(3,9);

當(dāng)類(lèi)中有指針型成員時(shí),需顯式定義構(gòu)造函

數(shù),并且在構(gòu)造函數(shù)中先用new動(dòng)態(tài)分配空

間。如:

2012-10-2318

1IANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

#include<iostream.h>

#include<string.h>

classString{

char*str;

public:

String(char*p){

if(P){

str=(char*)newchar[strlen(p)+1];

strcpy(str,p);

)

elsestr=O;

)

voidprint(){cout?str?,\n,;}

2012-1()319

JIANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

當(dāng)用new運(yùn)算符動(dòng)態(tài)創(chuàng)建對(duì)象數(shù)組時(shí),自動(dòng)多次調(diào)用

構(gòu)造函數(shù)。如:

Point*elems=newPoint[10];

此時(shí)依次調(diào)用構(gòu)造函數(shù),順序生成對(duì)象elems[0]、

elems[1]>.......elems[9]o

new的調(diào)用格式是類(lèi)型后面跟[元素個(gè)數(shù)],不能再跟

構(gòu)造函數(shù)的參數(shù),故數(shù)組元素的初始化只能調(diào)用無(wú)

參的構(gòu)造函數(shù),否則會(huì)出現(xiàn)編譯錯(cuò)誤。如定義:

PointP[4];

則在創(chuàng)建時(shí),數(shù)組的每一個(gè)對(duì)象都調(diào)用缺省構(gòu)造函

數(shù)進(jìn)行初始化。若Point類(lèi)只有帶參構(gòu)造函數(shù),則

必須使用初始化表。

2012-10-2320

1IANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

classPoint{

public:

intx,y;

Point(inta,intb){x=a;y=b;}

);

voidmain(){

PointP[4]={Point(1,3),Point(3,6),Point(9,2),

Point(5,3)};

)

2012-10-2321

1IANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

7、對(duì)象成員與構(gòu)造函數(shù)

若一個(gè)類(lèi)的成員定義為另一個(gè)類(lèi)的對(duì)象,如:

classAA{

intx,y;

};

classBB{

AAa1,a2;

floatz;

2012-10-2:22

JIANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

此時(shí)BB類(lèi)的構(gòu)造函數(shù)為:

(形參表):a1(實(shí)參表)聲2(實(shí)參表){

構(gòu)造函數(shù)調(diào)用的次序?yàn)橄日{(diào)用構(gòu)造函數(shù)生成

對(duì)象成員a1,a2,再調(diào)用BB的構(gòu)造函數(shù)生成

對(duì)象。

2012-10-2323

JIANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

始化劉家成員。

任務(wù):

(1)定義類(lèi)A;

(2)定義類(lèi)B;

(3)定義類(lèi)C,其中用類(lèi)A及類(lèi)B的對(duì)象作成員;

(4)定義主函數(shù)測(cè)試類(lèi)。

#include<iostream.h>

classA{

intx5y;

public:

A(inta,intb){x=a;y=b;}

voidShow(){

cout?,,x="?x?,\t,?,,y=,,?y?,\n,;

)

2012-10-2};

24

1IANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

intLength,Width;

public:

B(inta,intb){

Length=a;Width=b;

)

voidShow(){

cout?,,Length=,,<<Length?,\t,

<<,,Width=u<<Width?,\n,;

)

);

2012-10-2325

1IANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

class5

intr,High;

Aa1;〃定義了類(lèi)A的對(duì)象a1

Bb1;〃定義了類(lèi)B的對(duì)象b1

public:

C(inta,intb,intcjntd,inte,intf):a1(e,f),b1(Gd)

{r=a;

High=b;

)

voidShow(){

cout?,,r=',<<r?,\t,?,,High=',?High?,\n,;

a1.Show();

b1.Show();

)

20J-50-23

26

1IANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

voidmain(void){

Cc1(25,35,45,55,65/00);

c1.Show();

)

輸出:r=25Hihg=35

x=65y=100

Length=45Width=55

2012-10-2327

JIANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

類(lèi)型轉(zhuǎn)換構(gòu)造函數(shù)

若定義類(lèi)AA如下:

classAA{

intx;

public:

AA(inta){x=a;}

);

此時(shí)可用下列語(yǔ)句給對(duì)象賦值:

AAmm=5;

但當(dāng)成員多于一個(gè)時(shí),必須用類(lèi)型轉(zhuǎn)換構(gòu)造函

數(shù)。類(lèi)型轉(zhuǎn)換構(gòu)造函數(shù)的格式同一般的構(gòu)造函數(shù),

其本質(zhì)為強(qiáng)制轉(zhuǎn)換。

2012-10-2328

JIANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

classBB{

intx;

floaty;

public:

BB(inta=0,floatb=0){x=a;y=b;}

};

則此時(shí)可用下列語(yǔ)句給對(duì)象賦值:

BBmm(3,6.8),nn;〃定義對(duì)象

nn=BB(5,1.9);〃調(diào)用類(lèi)型轉(zhuǎn)換構(gòu)造函數(shù)

2012-10-2329

JIANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

蹙函數(shù)

1、完成拷貝功能構(gòu)造函數(shù)的作用

我們知道用構(gòu)造函數(shù)可以初始化對(duì)象,那么能不能象簡(jiǎn)

單變量的初始化一樣,直接用一個(gè)對(duì)象來(lái)初始化另一

個(gè)對(duì)象呢?答案是肯定的。以前面定義的Point類(lèi)為

例:

PointP(15,25);

PointQ=P;

后一個(gè)語(yǔ)句也可以寫(xiě)成:

PointQ(P);

表示用P初始化Q,此時(shí),Q各個(gè)成員的值與P各個(gè)

成員的值相同,也就是說(shuō),P各個(gè)成員的值被復(fù)制到

Q相應(yīng)的成員當(dāng)中。在這個(gè)初始化過(guò)程當(dāng)中,實(shí)際上

如為周用了一個(gè)拷貝構(gòu)造函數(shù)?!?lt;>3(

JIANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

、拷貝構(gòu)造函數(shù)的定義

當(dāng)構(gòu)造函數(shù)的參數(shù)為自身類(lèi)的引用時(shí),這個(gè)構(gòu)造函數(shù)

稱(chēng)為拷貝構(gòu)造函數(shù)。拷貝構(gòu)造函數(shù)的功能是用一個(gè)

已有對(duì)象初始化一個(gè)正在建立的同類(lèi)對(duì)象。

拷貝構(gòu)造函數(shù)的一般格式為:

類(lèi)名::類(lèi)名(類(lèi)名&對(duì)象名){

函數(shù)體

如果不顯式定義拷貝構(gòu)造函數(shù),編譯器會(huì)隱式定義一

個(gè)缺省的拷貝構(gòu)造函數(shù),它是一個(gè)內(nèi)聯(lián)的、公有的

成員函數(shù),它將參數(shù)對(duì)象的所有成員拷貝給當(dāng)前對(duì)

象的對(duì)應(yīng)成員。

2012-10-2331

JIANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

3、拷貝構(gòu)造函數(shù)的使用

?一般當(dāng)需要將參數(shù)對(duì)象的部分成員拷貝給當(dāng)

前對(duì)象的對(duì)應(yīng)成員時(shí),要顯式定義拷貝構(gòu)造

函數(shù)。

2012-10-2332

JIANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

例10?5重新定義Point類(lèi),并在其中設(shè)計(jì)拷貝構(gòu)造

函數(shù)。

任務(wù):

(1)定義類(lèi)Point;

(2)在其中定義拷貝構(gòu)造函數(shù)。

2012-10-2333

1IANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

#include<iostream.h>

classPoint{

intx,y;

public:

Point(inta=0,intb=0);〃構(gòu)造函數(shù)

Point(Point&P);〃拷貝構(gòu)造函數(shù)

voidprintXY(){cout?x?,\t,;cout?y?,\n,;}

);

Point::Point(inta,intb){

x=a;y=b;

}

2012-10-2334

JIANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

x=Rx;

y=o;

)

voidmain(){

Pointp1(1,2);

IIp1對(duì)象的x和y的初值分別為1和2

Pointp2(p1);

〃p2對(duì)象的x和y的初值分別為1和0

p2.printXY();

)

注意:當(dāng)類(lèi)中含有指針成員時(shí),必須顯式地定義

拷貝構(gòu)造函數(shù)。

2012-10-2335

JIANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

定義

定義一個(gè)對(duì)象時(shí),VC++自動(dòng)調(diào)用構(gòu)造函數(shù)建立該

對(duì)象并進(jìn)行初始化,同樣當(dāng)一個(gè)對(duì)象的生命周期

結(jié)束時(shí),VC++也會(huì)自動(dòng)調(diào)用一個(gè)函數(shù)釋放該對(duì)象

并進(jìn)行善后工作,這個(gè)特殊的成員函數(shù)即為析構(gòu)

函數(shù)。

析構(gòu)函數(shù)的一般格式為:

類(lèi)名:尸類(lèi)名(){

函數(shù)體

2012-10-2336

JIANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

有關(guān)析構(gòu)函數(shù)定義的幾點(diǎn)說(shuō)明:

(1)析構(gòu)函數(shù)可在類(lèi)內(nèi)定義,也可在類(lèi)外定義。

(2)析構(gòu)函數(shù)名與類(lèi)名相同,但在前面加上字符。

(3)析構(gòu)函數(shù)無(wú)函數(shù)返回類(lèi)型,且不帶任何參數(shù)。

(4)析構(gòu)函數(shù)不可重載,故析構(gòu)函數(shù)只有一個(gè)。

(5)析構(gòu)函數(shù)可以缺省。缺省的析構(gòu)函數(shù)為:

類(lèi)名::~類(lèi)名(){}

2012-10-2337

J1ANSHUUNIVERSITYofSCIENCETECHNOLOGY

的使用

析構(gòu)函數(shù)是在對(duì)象釋放時(shí),系統(tǒng)自動(dòng)調(diào)用

的。

例10?6析構(gòu)函數(shù)使用示例。

任務(wù):

(1)定義類(lèi)Point;

(2)在類(lèi)Point中顯式定義析構(gòu)函數(shù);

(3)定義主函數(shù),在其中定義對(duì)象,測(cè)試類(lèi)定義。

2012-10-2338

1IANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

#include<iostream.h>

classPoint{

intx,y;

public:

Point(inta,intb);

voidprintXY(){cout?x?5\f;cout?y?5\nJ;}

~Point(){

coutvv”調(diào)用了析構(gòu)函數(shù)!\n";

)

);

2012-10-2339

1IANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

Point::Point(inta,intb){

x=a;y=b;

)

voidmain(){

Pointp1(1,2);

IIp1對(duì)象的x和y的初值分別為1和2

p1.printXY();

)

輸出:12

調(diào)用了析構(gòu)函數(shù)!

2012-10-2340

JIANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

關(guān)于析構(gòu)函數(shù)使用的幾點(diǎn)說(shuō)明:

(1)如果在構(gòu)造函數(shù)或程序的執(zhí)行過(guò)程中,用

new為對(duì)象的某一個(gè)指針成員動(dòng)態(tài)申請(qǐng)了空間,

那么在類(lèi)中必須定義一個(gè)析構(gòu)函數(shù),并在析構(gòu)函

數(shù)中使用delete運(yùn)算符收回為字符串所分配的存

儲(chǔ)空間。

(2)當(dāng)用new動(dòng)態(tài)生成對(duì)象時(shí),必須用delete回

收空間。

(3)當(dāng)一個(gè)類(lèi)中含有另一個(gè)類(lèi)的對(duì)象成員時(shí),析

構(gòu)函數(shù)的調(diào)用次序與構(gòu)造函數(shù)的調(diào)用次序相反。

2012-10-2341

JIANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

用析構(gòu)函數(shù)收回動(dòng)態(tài)分配的空間。

任務(wù):

(1)定義含指針成員的類(lèi)String;

(2)在類(lèi)中顯式定義構(gòu)造函數(shù)及析構(gòu)函數(shù);

(3)定義主函數(shù)測(cè)試所定義的類(lèi)。

2012-10-2342

1IANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

<iostream.h>

#include<string,h>

classString{

char*str;

public:

String(char*p){

if(P)(

str=(char*)newchar[strlen(p)+1];

strcpy(str,p);

)

elsestr=O;

)

2012-10-2343

1IANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

voidprint(){

cout?str?,\n,;

}

~String(){

if(str)delete[]str;

}

);

voidmain(){

Stringpp(“VC++程序設(shè)計(jì)”);

pp-print();

)

輸出:VC++程序設(shè)計(jì)

2012-10-2344

JIANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

例10?8用delete回收動(dòng)態(tài)生成的對(duì)象。

任務(wù):

(1)定義含顯式構(gòu)造函數(shù)及析構(gòu)函數(shù)的類(lèi)Point;

(2)定義主函數(shù),其中用new創(chuàng)建對(duì)象。

2012-10-2345

1IANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

#include<iostream.h>

classPoint{

intx,y;

public:

Point(inta,intb){x=a;y=b;}

voidprintXY(){cout?x?J\f;cout?y?,\n5;}

~Point(){

coutvv”調(diào)用了析構(gòu)函數(shù)!\rT;

)

);

2012-10-2346

1IANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

voidmain()

Point*p1=newPoint(1,2);

p1->printXY();

deletep1;

)

輸出:12

調(diào)用了析構(gòu)函數(shù)!

2012-10-2347

JIANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

例10?9構(gòu)造函數(shù)與析構(gòu)函數(shù)的調(diào)用順序。

任務(wù):

(1)定義類(lèi)Obj;

(2)定義類(lèi)Con,其中含Obj的對(duì)象成員;

(3)定義主函數(shù)測(cè)試所定義的類(lèi)。

2012-10-2348

JIANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

#include<iostream.h>

classObj{

intval;

public:

Obj(){

val=O;

coutvvvalvvM'vv1'調(diào)用Obj缺省的構(gòu)造函數(shù)!\nK;

)

Obj(inti){

val=i;

coutvvvalvvM'vv”調(diào)用Obj的構(gòu)造函數(shù)!\nf,;

)

~Obj(){

coutw”調(diào)用Obj的析構(gòu)函數(shù)!\nM;

);

2012-10-2349

JIANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

Objone,two;

intdata;

public:

Con(){

data=0;

coutvvdatavv,\t,vv,,調(diào)用Con缺省的構(gòu)造函數(shù)!\nM;

)

Con(inti,intj,intk):one(k),two(i+j){

data=i;

coutvvdatavv,\t,vv,,調(diào)用Con的構(gòu)造函數(shù)!\n";

)

~Con(){coutvvi,調(diào)用Con的析構(gòu)函數(shù)!\n";}

■2012-10-2350

)5

JIANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

voidmain(void){

Conc(100,200,400);

〃先生成對(duì)象one,再生成對(duì)象two,最后生成對(duì)象c

)

輸出:400調(diào)用Obj的構(gòu)造函數(shù)!

300調(diào)用Obj的構(gòu)造函數(shù)!

100調(diào)用Con的構(gòu)造函數(shù)!

調(diào)用Con的析構(gòu)函數(shù)!

調(diào)用Obj的析構(gòu)函數(shù)!

調(diào)用Obj的析構(gòu)函數(shù)!

2012-10-2351

JIANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

大型時(shí)對(duì)象調(diào)用構(gòu)造函數(shù)及析

構(gòu)函數(shù)

表10-1構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用時(shí)間

對(duì)象類(lèi)型構(gòu)造函數(shù)調(diào)用析構(gòu)函數(shù)調(diào)用

全局對(duì)象程序運(yùn)行程序結(jié)束

局部對(duì)象對(duì)象定義處離開(kāi)程序塊

第一次執(zhí)行對(duì)象定

靜態(tài)局部對(duì)象程序結(jié)束

義處

new動(dòng)態(tài)創(chuàng)建的

創(chuàng)建對(duì)象處delete顯式撤消

對(duì)象

2012-10-2352

JIANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

例10?10不同類(lèi)型對(duì)象構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用。

任務(wù):

(1)定義類(lèi)Point,分別定義不含參數(shù)、含一個(gè)參

數(shù)、含二個(gè)參數(shù)及含三個(gè)參數(shù)的構(gòu)造函數(shù);

(2)分別定義全局、局部、靜態(tài)、動(dòng)態(tài)生成的對(duì)象,

分析構(gòu)造函數(shù)與析構(gòu)函數(shù)的調(diào)用次序。

2012-10-2353

1IANSHUUNIVERSITYofSCIENCEandTECHNOLOGY

#in

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論