第6章類(lèi)與對(duì)象的定義與訪(fǎng)問(wèn)_第1頁(yè)
第6章類(lèi)與對(duì)象的定義與訪(fǎng)問(wèn)_第2頁(yè)
第6章類(lèi)與對(duì)象的定義與訪(fǎng)問(wèn)_第3頁(yè)
第6章類(lèi)與對(duì)象的定義與訪(fǎng)問(wèn)_第4頁(yè)
第6章類(lèi)與對(duì)象的定義與訪(fǎng)問(wèn)_第5頁(yè)
已閱讀5頁(yè),還剩266頁(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)介

第6章類(lèi)與對(duì)象P216

?類(lèi)(Class)是面向?qū)ο蟪绦蛟O(shè)計(jì)(OOP)

實(shí)現(xiàn)信息封裝的基礎(chǔ)。

-類(lèi)是用戶(hù)定義類(lèi)型,也稱(chēng)為類(lèi)類(lèi)型。

?每個(gè)類(lèi)包含數(shù)據(jù)說(shuō)明和一組操作數(shù)據(jù)或傳

遞消息的函數(shù)。

?類(lèi)的實(shí)例稱(chēng)為對(duì)象。

6.1類(lèi)和對(duì)象的定義與訪(fǎng)問(wèn)P216

?在面向?qū)ο蟪绦蛟O(shè)計(jì)中,類(lèi)是程序基本單位。

-類(lèi)是數(shù)據(jù)和操作數(shù)據(jù)的函數(shù)的封裝。

?類(lèi)的對(duì)象使用自己的方法完成對(duì)數(shù)據(jù)的操作。

-類(lèi)可以隱藏?cái)?shù)據(jù)和操作細(xì)節(jié),對(duì)象通過(guò)類(lèi)接口

與外部通信。

例1?2用面向?qū)ο蠓椒ň幊?

求圓的周長(zhǎng)和面積P4

圓類(lèi)

數(shù)據(jù)成員

半徑

成員函數(shù)

置半徑值

求圓的半徑

求周長(zhǎng)

求面積

〃例1-2輸入圓的半徑,求圓的周長(zhǎng)和面積(用面向?qū)ο蠓椒ň幊?P4

#include<iostream>

usingnamespacestd;

classCircle

{private:

doubleradius;

public:

voidSet_Radius(doubler){radius=r;}

doubleGet_Radius(){returnradius;}

doubleGet_Girth(){return2*3.14f*radius;}

doubleGet_Area(){return3.14f*radius*radius;}

};"

intmain()

{CircleA,B;

A.Set_Radius(6.23);

cout?"A.Radius=H?A.Get_Radius()?endl;

cout?"A.Girth="?A.Get_Girth()?endl;

cout?"A.Area="?A.Get_Area()?endl;

B.Set_Radius(10.5);

cout?"B.radius="?B.Get_Radius()?endl;

cout?"B.Girths'1?B.Get_Girth()?endl;

cout?"B.Area=11?B.Get_Area()?endl;

return(O);

}

例1一2用面向?qū)ο蠓椒ň幊?,求圓的周長(zhǎng)和面積

#include<iostream>

數(shù)據(jù)成員

usingnamespacestd

classCircle

{doubleradius;

public:

voidSet_Radius(doubler){radius=r;}

doubleGet_Radius(){returnradius;}

doubleGet_Girth(){return2*3.14*radius;}

doubleGet_Area(){return3.14*radius*radius;}

};

intmain()

{CircleA,B;

A.Set_Radius(6.23);

cout?"A.Radius="vvA.Get_Radius()?endl;

cout?"A.Girth="<vA.Get_Girth()?endl;

cout?"A.Area="?A.Get_Area()?endl;

B.Set_Radius(10.5);

cout?"B.radius="?B.Get_Radius()?endl;

cout?"B.Girth="?B.Get_Girth()?endl;

cout?"B.Area="?B.Get_Area()?endl;

例1一2用面向?qū)ο蠓椒ň幊?,求圓的周長(zhǎng)和面積

#include<iostream>

usingnamespacestd;

classCircle成員函數(shù)

{doubleradius;

public:

voidSet_Radius(doubler){radius-r;}

doubleGet_Radius(){returnradius;}

doubleGet_Girth(){return2*3.14*radius;}

doubleGet_Area(){return3.14*radius*radius;}

};

intmain()

{CircleA,B;

A.Set_Radius(6.23);

cout?"A.Radius="?A.Get_Radius()?endl;

cout?"A.Girth="<vA.Get_Girth()?endl;

cout?"A.Area="?A.Get_Area()?endl;

B.Set_Radius(10.5);

cout?nB.radius="?B.Get_Radius()?endl;

cout?”B.Girth="wB.Get_Girth()?endl;

cout?"B.Area="?B.Get_Area()?endl;

例1一2用面向?qū)ο蠓椒ň幊蹋髨A的周長(zhǎng)和面積

#include<iostream>

usingnamespacestd;

classCircle

{doubleradius;

public:

voidSet_Radius(doubler){radius=r;}

doubleGet_Radius(){returnradius;}

doubleGet_Girth(){retuip2*3.14*radius;,

doubleGet_Area()Ld^turi建立對(duì)象is;}

L;main()(類(lèi)類(lèi)型變量)

{CircleA,B;

A.Set_Radius(6.23);

cout?"A.Radius="?A.Get_Radius()?endl;

cout?"A.Girth="<vA.Get_Girth()?endl;

cout?"A.Area="?A.Get_Area()?endl;

B.Set_Radius(10.5);

cout?nB.radius="?B.Get_Radius()?endl;

cout?”B.Girth="wB.Get_Girth()?endl;

cout?"B.Area="?B.Get_Area()?endl;

例1一2用面向?qū)ο蠓椒ň幊?,求圓的周長(zhǎng)和面積

#include<iostream>

usingnamespacestd;

classCircle

{doubleradius;

public:

voidSet_Radius(doubler){radius=r;}

doubleGet_Radius(){returnradius;}通過(guò)對(duì)象

doubleGet_Girth(){return2*3.14*qdi;}調(diào)用類(lèi)的成員函數(shù)

doubleGet_Area(){return3.14*radyls*radius-77

J,

intmain()

{CircleA,B;

A.Set_Radius(6.23);

cout?"A.Radius="?A.GetRadius()?endl;

cout?"A.Girth="?A.Get_Girth()?endl;

cout?"A.Area="v<A.Get_Area()?endl;

B.Set_Radius(10.5);

cout?"B.radius="?B.Get_Radius()?endl;

cout?"B.Girth="?B.Get_Girth()?endl;

cout?"B.Area="?B.Get_Area()?endl;

數(shù)組類(lèi)型定義與排序操作P217

〃排序函數(shù)原型

voidSort(int[],int);

〃數(shù)組相加函數(shù)原型

voidAdd(int[],int[],int);

//

intmain()

{inta[10],b[10];

II.......

Sort(a,10);

Sort(b,10);

Add(a,b,10);

II.......

)

“數(shù)組類(lèi)”類(lèi)型P217

?設(shè)計(jì)一個(gè)“數(shù)組類(lèi)”類(lèi)型,把數(shù)組類(lèi)型定

義和對(duì)數(shù)組排序操作封裝在一起。

?這樣“排序”就成了所有數(shù)組類(lèi)對(duì)象自己

做的操作。

封裝classArray〃定義數(shù)組類(lèi)

{int*ap;intlen;

數(shù)組與數(shù)組類(lèi)

public:

〃排序函數(shù)原型Array(intsize)〃建立數(shù)組

voidSort(int[],int);{len=size;ap=newint[size];}

〃數(shù)組相加函數(shù)原型voidSort();//排序

voidAdd(int[],int[],int);〃重載算符中函數(shù)

Arrayoperaor+(constArray&other);

intmain());

{inta[10],b[10];

intmain()

{Arraya(10),b(10);〃聲明對(duì)象

Sort(a,10);

Sort(b,10);a.Sort();b.Sort();〃調(diào)用排序方法

Add(a,b,10);a=a+b;〃數(shù)組相加

封裝

classArray〃定義數(shù)組類(lèi)

finf*ap;intlen;

die:

trray(intsize)〃建立數(shù)組

len=size;ap=newint[size];}

oidSort();〃排序

/重載算符+函數(shù)

rrayoperaor+(constArray&other);

111L

{inta[10],b[10];

intmainQ

{Arraya(10),b(10);〃聲明對(duì)象

Sort(a,10);

Sort(b,10);a.Sort();b.Sort();〃調(diào)用排序方法

Add(a,b,10);a=a+b;〃數(shù)組相加

封裝

classArray〃定義數(shù)組類(lèi)

數(shù)組與數(shù)組類(lèi)int*ap;intlen;

public:

//排序函數(shù)原型Array(intsize)〃建立數(shù)組

voidSort(int[],int);{len=size;ap=newint[size];}

〃數(shù)組相加函數(shù)原型voidSort();//排序

void戰(zhàn)算符+函數(shù)

operaor+(constArray&other);

intm

{int

:)

a(10),b(10);〃聲明對(duì)象

Son

Sona-Sort();b.Sort();//調(diào)用排序方法

Add(a,b,10);a=a+b;〃數(shù)組相加

6.1.1定義類(lèi)與對(duì)象P218

?C++中,類(lèi)定義的說(shuō)明語(yǔ)句一般形式為:

class類(lèi)名

{public:

公有性質(zhì)數(shù)據(jù)成員和成員函數(shù);

protected:

保護(hù)性質(zhì)數(shù)據(jù)成員和成員函數(shù);

private:

私有性質(zhì)數(shù)據(jù)成員和成員函數(shù);

};

說(shuō)明P218

?其中,class是定義類(lèi)的關(guān)鍵字。

■“類(lèi)名”是用戶(hù)自定義的標(biāo)識(shí)符,用于標(biāo)

識(shí)類(lèi)型名字。通常第一個(gè)字母大寫(xiě)。

?一對(duì)花括號(hào)相括說(shuō)明類(lèi)成員,以分號(hào)結(jié)束

類(lèi)定義語(yǔ)句。

*成員的性質(zhì)

-類(lèi)成員用關(guān)鍵字指定不同訪(fǎng)問(wèn)特性,決定其在類(lèi)體系

中或類(lèi)外的可見(jiàn)性。

?private聲明私有成員:私有性質(zhì)成員僅在類(lèi)中可見(jiàn)。

不能在類(lèi)外或派生類(lèi)中使用。如果私有類(lèi)成員放在放

在第一段,則可以省略關(guān)鍵字private。(建議不?。?/p>

?protected聲明保護(hù)成員:保護(hù)性質(zhì)成員在本類(lèi)和它

的派生類(lèi)中可見(jiàn)。

?public聲明公有成員:公有性質(zhì)的成員是的接口,在

類(lèi)中和類(lèi)外可見(jiàn)。

?各段中既可以包含數(shù)據(jù)成員,也可以包含成員函數(shù)。

成員函數(shù)可在類(lèi)外定義P219

?成員函數(shù)在類(lèi)外定義,使用作用域區(qū)分符

進(jìn)行說(shuō)明,此時(shí)函數(shù)頭形式為:

返回類(lèi)型類(lèi)名::函數(shù)名(參數(shù)表)

?簡(jiǎn)單的成員函數(shù)實(shí)現(xiàn)可以在類(lèi)中定義,此

時(shí)編譯器作內(nèi)聯(lián)函數(shù)處理。

關(guān)鍵字struct也可定義類(lèi)P218

?除了關(guān)鍵字class外,關(guān)鍵字struct也可

定義類(lèi)。

?用關(guān)鍵字struct也可定義類(lèi)時(shí),若不特別

指出,則所有成員都是公有成員。

關(guān)于類(lèi)聲明的進(jìn)一步說(shuō)明

1.允許已定義類(lèi)名出現(xiàn)在類(lèi)的說(shuō)明中

允許已定義類(lèi)名出現(xiàn)在類(lèi)的說(shuō)明中

例:

classX

);

classY

{XdataMember;

);

允許已定義類(lèi)名出現(xiàn)在類(lèi)的說(shuō)明中

例:

classlink

{link*next;

//聲明一個(gè)指向link類(lèi)類(lèi)型的指針

);

2.類(lèi)可以無(wú)名,用于直接聲明對(duì)象

}mydate;

3.類(lèi)是一個(gè)程序包

?可以只有數(shù)據(jù)成員或只有成員函數(shù),或者為空

#include<iostream>

usingnamespacestd;

classempty{};

intmain()

{emptye1;

cout?M&e1="?&e1?endl;

cout?Msizeofe1=M?sizeof(el)?endl;

}

強(qiáng)調(diào)

注:

1.允許已定義類(lèi)名出現(xiàn)在類(lèi)的說(shuō)明中

2.類(lèi)可以無(wú)名,用于直接聲明對(duì)象

3.類(lèi)是一個(gè)程序包??梢灾挥袛?shù)據(jù)成員或只有成員函數(shù),或者為空。

//例

#include<iostream>

CAC:\WIND0WS\systefn32\(

usingnamespacestd;*1=0012FF63日

classempty{};sizeofe1=1

intmain()請(qǐng)按任意犍繼續(xù)..

Lil

{emptyel;

cout?n&el="vv&el?endl;

cout?"sizeofel="?sizeofifel)?endl;

“類(lèi)”類(lèi)型變量的定義P219

?“類(lèi)”類(lèi)型變量的定義,定義方法與普通結(jié)

構(gòu)類(lèi)型變量定義方法相同。

?說(shuō)明一個(gè)類(lèi)類(lèi)型的對(duì)象(變量)后,編譯

器為每個(gè)對(duì)象的數(shù)據(jù)成員分配內(nèi)存。

?對(duì)象沒(méi)有成員函數(shù)的副本,類(lèi)成員函數(shù)可

以被對(duì)象調(diào)用。

6.1.2訪(fǎng)問(wèn)對(duì)象成員P220

?公有成員是提供給外部的接口。

?類(lèi)外用”.”和“?>”運(yùn)算符訪(fǎng)問(wèn)對(duì)象成員。

訪(fǎng)問(wèn)對(duì)象的公有成員P220

〃例6」訪(fǎng)問(wèn)對(duì)象的公有成員P220

#include<iostream>

usingnamespacestd;

classTclass

{public:

intx,y;

voidprint()

{cout?xw"Jwy;};

);

intmain()

{Tclasstest;

test.x=100;test.y=200;

test.print();

)

〃例6?2用指針訪(fǎng)問(wèn)對(duì)象成員

#include<iostream>

usingnamespacestd;

classTclass

{public:

intx,y;

voidprint(){cout?x??y?endl;};

);

intadd(Tclass*ptf){return(ptf->x+ptf->y);}

intmain()

{Tclasstest,*pt=new(Tclass);

pt->x=100;pt->y=200;

pt->print();

test.x=150;test.y=450;

test.print();

cout?"x+y="?add(&test);

)

6.1.3this指針P221

?C++中,同一類(lèi)的各個(gè)對(duì)象都有自己的數(shù)據(jù)成員

的存儲(chǔ)空間,系統(tǒng)不為每個(gè)類(lèi)的對(duì)象建立成員函

數(shù)副本,但類(lèi)的成員函數(shù)可以被各個(gè)對(duì)象調(diào)用。

?C++為成員函數(shù)提供了一個(gè)稱(chēng)為this的隱含指針

參數(shù),所以常常稱(chēng)成員函數(shù)擁有this指針。

?當(dāng)一個(gè)對(duì)象調(diào)用類(lèi)的成員函數(shù)時(shí),對(duì)象的地址被

傳遞給this指針,即this指針指向了該對(duì)象。

?this指針不能顯式聲明,但可以顯式使用。

說(shuō)明

?this指針是一個(gè)常指針,相當(dāng)于:

?class_Type*constthis;

?其中:

?class_Type是用戶(hù)定義的類(lèi)類(lèi)型標(biāo)識(shí)符。

■這里,this指針一旦初始化(成員函數(shù)被調(diào)用)

之后,獲取了對(duì)象地址,指針值就不能再修改

和賦值,以保證不會(huì)指向其它對(duì)象。

?this指針的顯式使用主要在運(yùn)算符重載、自引

用等場(chǎng)合。

this指針

#include<iostream>

usingnamespacestd;

classSimple

{intx,y;

public:

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

voidprintXY(){cout?x?”,?y?endl;};

};

intmain()

{Simpleobjl,obj2,obj3;

objl.setXY(10,15);obj1.xobjl.y

obj1.printXY();

obj2.setXY(20,25);obj2.xobj2.y

obj2.printXY();

obj3.setXY(30,35);obj3.xobj3.y

obj3.printXY();

6.1.3this指針

#include<iostream>

usingnamespacestd;

classSimple

{intx,y;

public:

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

voidprintXY(){cout?x?”,?y?endl;};

};

intmain()

{Simpleobjl,obj2,obj3;

objl.setXY(10,15);obj1.xobjl.y

obj1.printXY();

obj2.setXY(20,25);obj2.xobj2.y

obj2.printXY();

obj3.setXY(30,35);obj3.xobj3.y

obj3.printXY();

6.1.3this指針

#include<iostream>向哪個(gè)對(duì)象

usingnamespacestd;的數(shù)據(jù)成員賦值?

classSimple

{intx,y;

public:

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

voidprintXY(){夕out<<x??y?endl;};

);//

??八11

mtmam()//

{Simpleobj1,objQ,obj3;

objl.setXY(10,15,;

obj1.printXY();

obj2.setXY(20,25);

obj2.printXY();

obj3.setXY(30,35);

obj3.printXY();

6.1.3this指針

#include<iostream>〃例6-5

成員函數(shù)隱含定義this指針

usingnamespacestd;

classSimple接受調(diào)用對(duì)象的地址

{intx,y;

public:

voidsetXY(inta,intb){x=a;y

voidsetXY(inta,intb,Simple*con){this->x=a;this->y=b;}

intmain()

{Simpleobj1,obj2,,

objl.setXY(10,15Mobjn;

obj1.printXY();

obj2.setXY(20,25);

obj2.printXY();

obj3.setXY(30,35);

obj3.printXY();

6.1.3this指針

#include<iostream>〃例6-5

this指針不能顯式聲明

usingnamespacestd;

classSimple

{intx,y;

public:

voidsetXY(inta,intb){x=a;y:

voidsetXY(inta,intb){this->x=a;this->y=b;}

J,

intmain()

{Simpleobj1,obj2,obj3;

objl.setXY(10,15);obj1.xobjl.y

obj1.printXY();

obj2.setXY(20,25);obj2.xobj2.y

obj2.printXY();

obj3.setXY(30,35);obj3.xobj3.y

obj3.printXY();

6.1.3this指針

#include<iostream>〃例6-5

this指針不能顯式聲明

usingnamespacestd;

classSimple可以顯式使用

{intx,y;

public:

voidsetXY(inta,intb){x=a;y:

voidsetXY(inta,intb){this->x=a;this->y=b;}

J,

intmain()

{Simpleobj1,obj2,obj3;

objl.setXY(10,15);obj1.xobjl.y

obj1.printXY();

obj2.setXY(20,25);obj2.xobj2.y

obj2.printXY();

obj3.setXY(30,35);obj3.xobj3.y

obj3.printXY();

6.1.3this指針

#include<iostream>〃例6-5

usingnamespacestd;

classSimple通過(guò)調(diào)用函數(shù)的對(duì)象

{intx,y;this指針獲取對(duì)象地址

public:

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

voidprintXYQ4cout?x?vvy?endl;};

/

intmain()/

{Simnlgfobjl,obj2,obj3;

objl?>etXY(10,15);obj1.xobjl.y

obj1.printXY();

obj2.setXY(20,25);obj2.xobj2.y

obj2.printXY();

obj3.setXY(30,35);obj3,xobj3.y

obj3.printXY();

6.1.3this指針

#include<iostream>〃例6-5

usingnamespacestd;

classSimple

{intx,y;

public:

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

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

};

intmain()

{Simpleobj1,obj2,obj3;

objl.setXY(10,15);obj1.x10objl.y15

obj1.printXY();

obj2.setXY(20,25);obj2.xobj2.y

obj2.printXY();

obj3.setXY(30,35);obj3.xobj3.y

obj3.printXY();

6.1.3this指針

#include<iostream>〃例6-5

usingnamespacestd;

classSimple

{intx,y;

public:

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

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

};

intmain()

{Simpleobj1,obj2,obj3;

objl.setXY(10,15);obj1.x10objl.y15

obj1.printXY();

obj2.setXY(20,25);obj2.xobj2.y

obj2.printXY();

obj3.setXY(30,35);obj3.xobj3.y

obj3.printXY();

6.1.3this指針

#include<iostream>〃例6-5

usingnamespacest^;在objl上操作10,15

classSimple

{intx,y;

public:

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

voidprintXY(){cout?xvv"J?y?endl;};

intmain()

{Simpleobj1,obj2,obj3;

objl.setXY(10,15);

Cggp.printXY^

obj2.setXY(20,25);

obj2.printXY();

obj3.setXY(30,35);

obj3.printXY();

6.1.3this指針

#include<iostream>〃例6-5

usingnamespacestd;10,15

classSimple

{intx,y;

public:

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

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

};

intmain()

{Simpleobj1,obj2,obj3;

objl.setXY(10,15);obj1.x10objl.y15

obj1.printXY();

obj2.setXY(20,25);obj2.y

obj2.printXY();

obj3.setXY(30,35);obj3,xobj3.y

obj3.printXY();

6.1.3this指針

#include<iostream>〃例6-5

usingnamespaces叱

在obj2上操作10,15

classSimple

{intx,y;

public:

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

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

intmain()

{Simpleobj1,obj2,obj3;

objl.setXY(10,15);

obj1.printXY();

之亞.setXY(2U,軍力;

obj2.printXY();

obj3.setXY(30,35);

obj3.printXY();

6.1.3this指針

#include<iostream>〃例6-5

町在上操作

usingnamespaces0bj?10,15

classSimple/_______________

{intx,y;/

public:J

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

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

intmain()

{Simpleobj1,obj2,obj3;

objl.setXY(10,15);obj1.x10objl.y15

obj1.printXY();

COST.setXY(2025^obj2.x20obj2.y25

obj2.printXY();

obj3.setXY(30,35);obj3.xobj3.y

obj3.printXY();

6.1.3this指針

#include<iostream>〃例6-5

usingnamespacestd;10,15

classSimple

{intx,y;

public:

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

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

};

intmain()

{Simpleobj1,obj2,obj3;

objl.setXY(10,15);obj1.x10objl.y15

obj1.printXY();

obj2.setXY(20,25);obj2.x20obj2.y25

obj2.printXY();

obj3.setXY(30,35);obj3.xobj3.y

obj3.printXY();

6.1.3this指針

#include<iostream>〃例6-5

usingnamespacest^;在obj2上操作10,15

classSimple

{intx,y;

public:

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

voidprintXY(){cout?xvv"J?y?endl;};

intmain()

{Simpleobj1,obj2,obj3;

objl.setXY(10,15);obj1.x10objl.y15

obj1.printXY();

obj2.setXY(20,25);obj2.x20obj2.y25

?printXY^

obj3.setXY(30,35);obj3.xobj3.y

obj3.printXY();

6.1.3this指針

#include<iostream>〃例6-5

usingnamespacest^;在obj2上操作10,15

classSimple20,25

{intx,y;

public:

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

voidprintXY(){cout?xvv"J?y?endl;};

intmain()

{Simpleobj1,obj2,obj3;

objl.setXY(10,15);obj1.x10objl.y15

obj1.printXY();

obj2.setXY(20,25);obj2.x20obj2.y25

?printXY^

obj3.setXY(30,35);obj3.xobj3.y

obj3.printXY();

6.1.3this指針

#include<iostream>〃例6-5

usingnamespacestd;10,15

classSimple20,25

{intx,y;

public:

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

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

};

intmain()

{Simpleobj1,obj2,obj3;

objl.setXY(10,15);obj1.x10objl.y15

obj1.printXY();

obj2.setXY(20,25);obj2.x20obj2.y25

obj2.printXY();

obj3.setXY(30,35);obj3.xobj3.y

obj3.printXY();

6.1.3this指針

#include<iostream>〃例6-5

usingnamespacestd;10,15

classSimple20,25

{intx,y;

public:

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

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

intmain()

{Simpleobj1,obj2,obj3;

objl.setXY(10,15);obj1.x10objl.y15

obj1.printXY();

obj2.setXY(20,25);obj2.x20obj2.y25

obj2.printXY();

obj3,setXY(30,35);obj3.xobj3.y

obj3.printXY();

6.1.3this指針

#include<iostream>〃例6-5

usingnamespacestd;10,15

classSimple20,25

{intx,y;

public:

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

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

};

intmain()

{Simpleobj1,obj2,obj3;

objl.setXY(10,15);obj1.x10objl.y15

obj1.printXY();

obj2.setXY(20,25);obj2.x20obj2.y25

obj2.printXY();

obj3,setXY(30,35);obj3.x30obj3.y35

obj3.printXY();

6.1.3this指針

#include<iostream>〃例6-5

usingnamespacestd;10,15

classSimple20,25

{intx,y;

public:

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

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

};

intmain()

{Simpleobj1,obj2,obj3;

objl.setXY(10,15);obj1.x10objl.y15

obj1.printXY();

obj2.setXY(20,25);obj2.x20obj2.y25

obj2.printXY();

obj3.setXY(30,35);obj3.x30obj3.y35

obj3.printXY();

6.1.3this指針

#include<iostream>〃例6-5

usingnamespacestd;10,15

classSimple20,25

{intx,y;

public:

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

voidprintXY(){cout?xvv"J?y?endl;};

intmain()

{Simpleobj1,obj2,obj3;

objl.setXY(10,15);obj1.x10objl.y15

obj1.printXY();

obj2.setXY(20,25);obj2.x20obj2.y25

obj2.printXY();

obj3.setXY(30,35);obj3.x30obj3.y35

obj3,printXY();

6.1.3this指針

#include<iostream>〃例6-5

usingnamespacestd;10,15

classSimple20,25

{intx,y;30,35

public:

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

voidprintXY(){cout?xvv"J?y?endl;};

intmain()

{Simpleobj1,obj2,obj3;

objl.setXY(10,15);obj1.x10objl.y15

obj1.printXY();

obj2.setXY(20,25);obj2.x20obj2.y25

obj2.printXY();

obj3.setXY(30,35);obj3.x30obj3.y35

obj3,printXY();

6.1.3this指針

#include<iostream'

.一J

usingnamespacesi15

成員函數(shù)擁有this指針

classSimple15

{intx,y;行

public:

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

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

};

intmain()

{Simpleobjl,obj2,obj3;

objl.setXY(10,15);obj1.x10objl.y15

obj1.printXY();

obj2.setXY(20,25);obj2.x20obj2.y25

obj2.printXY();

obj3.setXY(30,35);obj3.x30obj3.y35

obj3.printXY();

6.2構(gòu)造函數(shù)和析構(gòu)函數(shù)P222

基本概念

■在類(lèi)中構(gòu)造函數(shù)和析構(gòu)函數(shù)都是特殊函數(shù)。

?構(gòu)造函數(shù)用于建立類(lèi)的實(shí)例;

?析構(gòu)函數(shù)用于撤消類(lèi)的實(shí)例。

■程序并不顯式調(diào)用這些函數(shù),當(dāng)程序創(chuàng)建一個(gè)

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

?當(dāng)程序撤消一個(gè)對(duì)象時(shí),系統(tǒng)自動(dòng)調(diào)用析構(gòu)函

數(shù)。

?這些都是編譯器自動(dòng)調(diào)用的。

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

?構(gòu)造函數(shù)是用于創(chuàng)建對(duì)象的特殊成員函數(shù)。

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

?構(gòu)造函數(shù)的作用是:

為對(duì)象分配空間;

對(duì)數(shù)據(jù)成員賦初值;

請(qǐng)求其他資源。

說(shuō)明

?構(gòu)造函數(shù)名與類(lèi)名相同:類(lèi)名

?構(gòu)造函數(shù)可以有任意類(lèi)型的參數(shù),但沒(méi)有返回

類(lèi)型。

?構(gòu)造函數(shù)可以由用戶(hù)提供,也可使用系統(tǒng)的默

認(rèn)版本。

?如果沒(méi)有用戶(hù)定義的構(gòu)造函數(shù)時(shí),系統(tǒng)提供缺

省版本的構(gòu)造函數(shù),只負(fù)責(zé)對(duì)象的創(chuàng)建,不能

為對(duì)象中的數(shù)據(jù)成員賦初值。(不做數(shù)據(jù)成員

初始化工作)

?構(gòu)造函數(shù)可以重載。

何時(shí)調(diào)用構(gòu)造函數(shù)

?何時(shí)調(diào)用構(gòu)造函數(shù)十分明確:

?定義類(lèi)的對(duì)象時(shí);

?調(diào)用new或者new□運(yùn)算符動(dòng)態(tài)開(kāi)辟內(nèi)存空間時(shí)。

?在對(duì)象被創(chuàng)建的時(shí)候就會(huì)調(diào)用構(gòu)造函數(shù),

?比如:聲明一個(gè)類(lèi)classA{?.J,

?當(dāng)你在main函數(shù)中Aa;

?定義一個(gè)對(duì)象a的時(shí)候,就調(diào)用構(gòu)造函數(shù)。

?默認(rèn)構(gòu)造函數(shù)都是無(wú)參數(shù)的。

何時(shí)調(diào)用析構(gòu)函數(shù)

?何時(shí)調(diào)用構(gòu)造函數(shù)要十分明確:

?當(dāng)函數(shù)調(diào)用結(jié)束的時(shí)候,會(huì)自動(dòng)調(diào)用析構(gòu)

函數(shù),析構(gòu)的作用就是釋放對(duì)象占用的資

源。

?以為默認(rèn)析構(gòu)什么也不打印,所以你不會(huì)

直觀(guān)看出析構(gòu)函數(shù)什么時(shí)候執(zhí)行,i己在

析構(gòu)中加上打印的語(yǔ)言你就會(huì)看到了。

構(gòu)造函數(shù)和析構(gòu)函數(shù)

例:

classAA

{public:

AA(){……}

?AA(){……}

};

voidtest()

{intx,y;

AAtl,t2;

return;

構(gòu)造函數(shù)和析構(gòu)函教_

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

};

voidtest()

{intx,y;

AAtl,t2;

return;

構(gòu)造函數(shù)和析構(gòu)函數(shù)

例:/析構(gòu)函數(shù)

classAA//

{public://

AA(){…./

);

voidtest()

{intx,y;

AAtl,t2;

return;

構(gòu)造函數(shù)和析構(gòu)函數(shù)

例:

classAA

{public:

AA(){……}

?AA(){.......

};

voidtest()

{intx,y;〃聲明變量時(shí)開(kāi)辟兩個(gè)整型存儲(chǔ)空間

AAtl,t2;

return;

構(gòu)造函數(shù)和析構(gòu)函數(shù)

例:

classAA

{public:

AA(){……}

?AA(){.......

};

voidtest()

{intx,y;

〃兩次調(diào)用構(gòu)造函數(shù),對(duì)象tl,t2

return;

構(gòu)造函數(shù)和析構(gòu)函數(shù)

例:

classAA

{public:

AX01

?AA(){

};

voidtest()

{intx,y;

AAtl,t2;〃兩次調(diào)用構(gòu)造函數(shù),創(chuàng)建對(duì)象

return;

構(gòu)造函數(shù)和析構(gòu)函數(shù)

例:

classAA

{public:

AA(){……}

?AA(){.......

};

voidtest()

{intx,y;

AAtl,t2;

return;

〃兩次調(diào)用析構(gòu)函數(shù),撤消對(duì)象tl,t2

構(gòu)造函數(shù)和析構(gòu)函數(shù)

例:

classAA

{public:

AA(){

?AA(){……}

};

voidtest()

{intx,y;

AAtl,t2;

return;//兩次調(diào)用析構(gòu)函數(shù),撤消對(duì)象

構(gòu)造函數(shù)和析構(gòu)函數(shù)

例:

classAA

{public:

AA(){……}

?AA(){.......

};

voidtest()

{intx,y;

AAtl,t2;

return;〃兩次調(diào)用析構(gòu)函數(shù),撤消對(duì)象

}

〃變量生存期結(jié)束

6.2.1簡(jiǎn)單構(gòu)造函數(shù)和析構(gòu)函數(shù)

P222

■構(gòu)造函數(shù)原型

類(lèi)名::類(lèi)名(參數(shù)表)、

?析構(gòu)函數(shù)原型

類(lèi)名~類(lèi)名()

#include<iostream>//例6-3重寫(xiě)日期類(lèi)P223

usingnamespacestd;

classDate

{public:

Date();

-Date();

voidSetDate(inty,intm,intd);

intIsLeapYear();

voidPrintDate();

private:

intyear,month,day;

};

Date::Date(){cout?"DateobjectinitializedAn";}〃無(wú)參構(gòu)造函數(shù)

Date::-Date(){cout?nDateobjectdestroyed.\n";}//析構(gòu)函數(shù)

voidDate::SetDate(inty,intm,intd){year=y;month=m;day=d;}

intDate::IsLeapYear(){return(year%4==0&&year%100!=0)||(year%400==0);}

voidDate::PrintDate(){cout?year??month??day?endl;}

intmain()

{Dated;

d.SetDate(2001,10,1);

d.PrintDate();

}

#include<iostream>〃例6?3重寫(xiě)日期類(lèi)P223

usingnamespacestd;

classDate

{public:

Date();

~Date();

voidSetDate(inty,intm,intd);

intIsLeapYear();

voidPrintDate();

private:

intyear,month,day;

};

Date::Date(){coutvv"Dateobjectinitialized.、!!'';}〃無(wú)參構(gòu)造函數(shù)

Date::~Date()"Dateobjectdestroyed.\n";}//析構(gòu)函

voidDate::SetDate(intintd){year=y;monthday=d;}

intDate::IsLeapYear()

voidDate::PrintDate()

創(chuàng)建對(duì)象時(shí)

intmain()

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

d.SetDate(2001,10,l);

d.PrintDate();

#include<iostream>〃例重寫(xiě)日期類(lèi)P223

usingnamespacestd;

classDate

{public:

Date();

?Date。;

voidSetDate(inty,intm,intd);

intIsLeapYear();

voidPrintDate();

private:

intyear,month,day;

};

Date::Date(){cout?"Dateobjectinitialized.、!!";}//無(wú)參構(gòu)造函數(shù)

Date::-Date(){cout?”Dateobjectdestroyed.\nn;}〃析構(gòu)函數(shù)

voidDate::Setinty,intm,intd){year=y;month=m;day=d;}

intDate::IsLeapYear(){reear%4==0&&year%100!=0)||(year%400==0);}

voidDate::PrintDate(){cout?year<?ndl;}

intmain()作用域結(jié)束時(shí)

{Dated;調(diào)用析構(gòu)函數(shù)

d.SetDate(2001,10,ll<

d.PrintDate();

)

#include<iostream>〃例6-3重寫(xiě)日期類(lèi)P223

usingnamespacestd;

CAC:\VIID0TS\systeB32\cBd.exe

classDate

Dateobjectinitialized.

{public:2001/10/1

Date();Dateobjectdestroyed.

~Date();請(qǐng)按任意鍵繼續(xù).?.

voidSetDate(inty,intm,intd);

intIsLeapYear();

溫馨提示

  • 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)論