課件第10講對(duì)組和指針_第1頁(yè)
課件第10講對(duì)組和指針_第2頁(yè)
課件第10講對(duì)組和指針_第3頁(yè)
課件第10講對(duì)組和指針_第4頁(yè)
課件第10講對(duì)組和指針_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

教學(xué)目的與要求:了解對(duì)象的綜合使用。掌握對(duì)象數(shù)組和對(duì)象指針的使用及對(duì)象作為函數(shù)參數(shù)。教學(xué)內(nèi)容提要:1、對(duì)象數(shù)組;2、與對(duì)象有關(guān)指針;3、對(duì)象作為函數(shù)參數(shù)教學(xué)重點(diǎn):對(duì)象數(shù)組、對(duì)象指針。教學(xué)難點(diǎn):對(duì)象數(shù)組、對(duì)象指針。教學(xué)進(jìn)度:P74~P84教學(xué)過程:第10

講對(duì)象數(shù)組和指針及對(duì)象作為函數(shù)參數(shù)聲明:類名數(shù)組名[元素個(gè)數(shù)];訪問方法:數(shù)組名[下標(biāo)] .

成員名對(duì)象數(shù)組的初始化:數(shù)組中每一個(gè)元素對(duì)象被創(chuàng)建時(shí),系統(tǒng)都會(huì)調(diào)用類構(gòu)造函數(shù)初始化該對(duì)象。通過初始化列表賦值。例:Point

A[2]={Point(1,2),Point(3,4)};如果沒有為數(shù)組元素指定顯式初始值,數(shù)組元素便使用缺省值初始化(調(diào)用缺省構(gòu)造函數(shù))。【

10.1

對(duì)象數(shù)組】4.數(shù)組元素所屬類的構(gòu)造函數(shù):不聲明構(gòu)造函數(shù),則采用缺省構(gòu)造函數(shù)。各元素對(duì)象的初值要求為相同的值時(shí),可以聲明具有缺省形參值的構(gòu)造函數(shù)。Point::Point(int

x=0,int

y=0){

X=x;

Y=y;}Point

obj[4];各元素對(duì)象的初值要求為不同的值時(shí),需要聲明帶形參(無(wú)缺省值)的構(gòu)造函數(shù)。Point::Point(int

x,int

y){

X=x;

Y=y;}Point

obj[3];//errorPiont

obj[3]={Point(1,2),

Point(3,4),

Point(5,6)}當(dāng)數(shù)組中每一個(gè)對(duì)象被刪除時(shí),系統(tǒng)都要調(diào)用一次析構(gòu)函數(shù)。Location::Location(int

xx,int

yy){

X=xx;Y=yy;cout<<

"Constructorcalled."<<endl;}Locatuon::~Location(

){cout<<"Destructor

called.“<<endl;}void

Location::Move(int

x,int

y){X=x;Y=y;}例10.1#include<iostream.h>class

Location{

public:Location(

);Location(int

xx,int

yy);~Location(

);void

Move(int

x,int

y);int

GetX(

{return

X;}int

GetY(

{return

Y;}private:int

X,Y;};Location::Location(

){

X=Y=0;cout<<"Default

Constructorcalled."<<endl;}5.對(duì)象組應(yīng)用舉例:int

main(

){cout<<"Entering

main..."<<endl;Location

A[2]={Location(1,3),Location(4,5)};for(int

i=0;i<2;i++)A[i].Move(i+10,i+20);cout<<"Exiting

main..."<<endl;return

0;}Entering

main...Constructor

called.Constructor

called.Exiting

main...Destructor

called.Destructor

called.指針可以指向任一類型的變量,也可以指向?qū)ο蟆?.對(duì)象的指針聲明一個(gè)指針來(lái)保存對(duì)象的地址,這個(gè)指針就是指向?qū)ο蟮闹羔?,?jiǎn)稱對(duì)象的指針。對(duì)象的指針的聲明方法與普通變量的指針相同。形式如下:類名*對(duì)象的指針名通過對(duì)象的指針間接訪問對(duì)象成員的方式相應(yīng)地表示為:(*對(duì)象的指針名).數(shù)據(jù)成員名

//訪問數(shù)據(jù)成員(*對(duì)象的指針名).成員函數(shù)名(參數(shù)表)//訪問成員函數(shù)注因?yàn)殚g接訪問運(yùn)算符“*”的優(yōu)先級(jí)低于成員選擇運(yùn)算符“.”,所以表達(dá)式中對(duì)象的指針名兩邊的圓括號(hào)不能省略?!?/p>

10.2

與對(duì)象有關(guān)的指針】例如—-聲明的類Cylinder,可做如下聲明和訪問:Cylinder

cylinder1;Cylinder

*pcylinder=&cylinder1;(*pcylinder).setcylinder(20.0,20.0);(*pcylinder).surfacearea();表述形式如下:對(duì)象的指針名->數(shù)據(jù)成員名;

//訪問數(shù)據(jù)成員對(duì)象的指針名->成員函數(shù)名(參數(shù)表);//訪問成員函數(shù)“->”也叫做成員選擇運(yùn)算符,該運(yùn)算符可用于通過對(duì)象的指針或結(jié)構(gòu)變量的指針來(lái)訪問其中的成員。例如—-聲明的類Cylinder,也可做如下聲明和訪問:Cylinder

cylinder1;Cylinder

*pcylinder=&cylinder1;pcylinder

->setcylinder(20.0,20.0);pcylinder->surfacearea();C++語(yǔ)言提供了另一個(gè)更常用的方法://聲明類class

Date{public:Date(int

y=2001,int

m=1,int

d=1); //帶默認(rèn)值的構(gòu)造函數(shù)//析構(gòu)函數(shù)//用于改變?nèi)掌诘暮瘮?shù)//用于輸出日期的函數(shù)~Date(){}void

setDate(int

y,int

m,int

d);void

showDate()

const;private:int

year,month,day;};Date::Date(int

y,int

m,int

d)//實(shí)現(xiàn)構(gòu)造函數(shù)使用對(duì)象的指針前也一定要給指針賦一個(gè)合法的值。例10.2

對(duì)象的指針的聲明與訪問#include<iostream.h>{

year=y;month=m;day=d;}void

Date::setDate(int

y,int

m,int

d)//實(shí)現(xiàn)改變?nèi)掌诘暮瘮?shù){

year=y;month=m;day=d;//實(shí)現(xiàn)輸出日期的函數(shù)}void

Date::showDate()

const{cout<<year<<“年”<<month<<“月”<<day<<“日”<<endl;}void

main(){Date

date;Date

*pdate=&date;//聲明對(duì)象//聲明對(duì)象的指針(續(xù))date.showDate();pdate->showDate();//改變?nèi)掌谥礵ate.setDate(2001,6,30);date.showDate();pdate->showDate();pdate->setDate(2001,12,31);date.showDate();pdate->showDate();}2001年1月1日2001年1月1日2001年6月30日2001年6月30日2001年12月31日2001年12月31日(續(xù))//通過對(duì)象名訪問公有成員函數(shù)//通過對(duì)象的指針訪問公有成員函數(shù)由于this指針的隱含性,在一般情況下并不需要顯式標(biāo)明。注調(diào)用一個(gè)對(duì)象的成員函數(shù)時(shí),編譯系統(tǒng)會(huì)首先將這個(gè)對(duì)象的地址賦給被調(diào)用的成員函數(shù)中的this指針,然后再調(diào)用成員函數(shù)。成員函數(shù)訪問數(shù)據(jù)成員時(shí)就隱含地使用this指針來(lái)確保訪問到的數(shù)據(jù)成員屬于這個(gè)對(duì)象。2.

this指針比如:

Date::Date(int

y,int

m,int

d){this->day=d;}this->year=y;this->month=m;說明:顯式使用了this指針,明確地表示出成員函數(shù)當(dāng)前所操作的數(shù)據(jù)成員所屬的對(duì)象。this指針也是一個(gè)指向?qū)ο蟮闹羔?,它隱含在類成員函數(shù)中,用來(lái)指向成員函數(shù)所屬類的正在被操作的對(duì)象。this指針的使用//聲明類#include<iostream.h>class

Date{public:Date(int

y=2001,int

m=1,int

d=1);//帶缺省值的構(gòu)造函數(shù)~Date(){} //析構(gòu)函數(shù)void

setDate(int

y,int

m,int

d);//用于改變?nèi)掌诘暮瘮?shù)//用于輸出日期的函數(shù)void

showDate()

const;private:int

year,month,day;};//實(shí)現(xiàn)構(gòu)造函數(shù)Date::Date(int

y,int

m,int

d){this->year=y;//顯式使用this指針this->month=m;

//this指針指向正在被操作的對(duì)象例10.3this->day=d;}void

Date::setDate(int

y,int

m,int

d) //實(shí)現(xiàn)改變?nèi)掌诘暮瘮?shù)//顯式使用this指針//this指針指向正在操作的對(duì)象{

this->year=y;this->month=m;this->day=d;}void

Date::showDate()const //實(shí)現(xiàn)輸出日期的函數(shù){

cout<<this->year<<“年”<<this->month<<“月”<<this->day<<“日”<<endl;}void

main(){Date

date(2001,1,1);Date

*pdate=&date;date.showDate();pdate->showDate();//聲明對(duì)象//聲明對(duì)象的指針//通過對(duì)象名訪問公有成員函數(shù)//通過對(duì)象的指針訪問公有成員函數(shù)date.setDate(2001,6,30); //改變?nèi)掌冢ɡm(xù))date.showDate();date.showDate();pdate->showDate();}注靜態(tài)成員函數(shù)沒有this指針3.

指向類成員的指針類中的數(shù)據(jù)成員和成員函數(shù)在類實(shí)例化后在內(nèi)存中也有一定的存儲(chǔ)地址,可以聲明指向類成員的指針。通過這些指針,可以訪問對(duì)象的成員。指向成員函數(shù)的指針(簡(jiǎn)稱成員函數(shù)指針)指向類成員的指針指向數(shù)據(jù)成員的指針(簡(jiǎn)稱數(shù)據(jù)成員指針)pdate->showDate();pdate->setDate(2001,12,31);說明:顯式使用this指針?biāo)甑娜蝿?wù)都可以由系統(tǒng)隱含完。(續(xù))在這里賦值也就是確定指針指向類中的哪一個(gè)成員。對(duì)于數(shù)據(jù)成員指針,賦值的形式如下:數(shù)據(jù)成員指針名=&類名::數(shù)據(jù)成員名對(duì)于下面聲明的類A

比如,

class

A{

public:...int

a;...};數(shù)據(jù)類型是指數(shù)據(jù)成員指針?biāo)赶虻臄?shù)據(jù)成員的類型。類名是數(shù)據(jù)成員所屬類的名稱。在使用前必須聲明并賦值聲明一個(gè)數(shù)據(jù)成員指針的形式如下:數(shù)據(jù)類型

類名::*數(shù)據(jù)成員指針名;int

A::*p=&A::a;等價(jià)int

A::*p;p=&A::a;由于類本身是一個(gè)類型,不是變量,系統(tǒng)并不為類分配內(nèi)存。在聲明

了指向類成員的指針后,還需要指定該類的一個(gè)對(duì)象來(lái)實(shí)例化這個(gè)類。注在使用時(shí)還必須通過指定的對(duì)象名或指向這個(gè)對(duì)象的指針來(lái)訪問數(shù)據(jù)成員指針?biāo)赶虻某蓡T。訪問數(shù)據(jù)成員的表述形式如下:對(duì)象名.*類成員指針名對(duì)象指針名->*類成員指針名//通過對(duì)象名訪問//通過對(duì)象的指針訪問可以用下式聲明指向這個(gè)類的數(shù)據(jù)成員a的指針p。數(shù)據(jù)成員指針的使用//聲明類//EXAMPLE4_6.H#include<iostream.h>class

A{public:A(double

x1=0.0,double

y1=0.0);~A(){}void

setxy(double

x1,double

y1);void

outputxy()const;double

x;private:double

y;};//EXAMPLE4_6.CPP#include″EXAMPLE4_6.H″A::A(double

x1,double

y1):x(x1),y(y1){}例10.4void

A::setxy(double

x1,double

y1){x=x1;y=y1;}void

A::outputxy()

const{cout<<″x=\t″<<x<<″\ty=\t″<<y<<endl;}voidmain(){A

a(1.5,2.6),*pa=&a;

//聲明類A的對(duì)象a及指針pa,并讓對(duì)象pa

指向adouble

A::*px=&A::x;a.outputxy();//聲明指向類A的double型數(shù)據(jù)成員的指針//并使其指向公有成員x//調(diào)用成員函數(shù)輸出cout<<″a.x=\t″<<a.x<<endl;

//利用對(duì)象名直接訪問成員xcout<<″a.*px=\t″<<a.*px<<endl;

//利用對(duì)象名和數(shù)據(jù)成員指針//間

接訪問xcout<<″pa->*px=\t″<<pa->*px<<endl;

//利用對(duì)象的指針和//成員指針間接訪問x}(y=2.6x=

1.5a.x=

1.5a.*px=

1.5pa->*px=

1.5例10.5#include<iostream.h>class

Point{

public:Point(

){

X=Y=0;

cout<<"Default

Constructorcalled.\n";}Point(int

xx,int

yy);{ X=xx;

Y=yy;

cout<<

"Constructorcalled.\n";

}~Point(

{ cout<<"Destructor

called.\n";

}int

GetX(

{return

X;}int

GetY(

{return

Y;}void

Move(int

x,int

y){

X=x;

Y=y;

}private:int

X,Y;};void

main(

){ cout<<"Step

One:"<<endl;Point

*Ptr1=new

Point;delete

Ptr1;cout<<"Step

Two:"<<endl;Ptr1=new

Point(1,2);

delete

Ptr1;}運(yùn)行結(jié)果:Step

One:Default

Constructor

called.Destructor

called.Step

Two:Constructor

called.Destructor

called.{

//類的聲明同例,略};void

main(

){ Point

*Ptr=new

Point[2];//創(chuàng)建對(duì)象數(shù)組Ptr[0].Move(5,10);Ptr[1].Move(15,20);//通過指針訪問數(shù)組元素的成員//通過指針訪問數(shù)組元素的成員cout<<"Deleting..."<<endl;}delete[]Ptr;

//刪除整個(gè)對(duì)象數(shù)組運(yùn)行結(jié)果:Default

Constructor

called.Default

Constructor

called.Deleting...Destructor

called.Destructor

called.例10.6#include<iostream.h>class

Point【10.3

向函數(shù)傳遞對(duì)象】10.3.1

使用對(duì)象作為函數(shù)參數(shù)例10.7#include<iostream.h>class

aClass{public:aClass(int

n)

{

i=n;

}void

set(int

n){

i=n;

}int

get(

){

return

i;

}private: int

i;};void

sqr(aClass

ob){

ob.set(ob.get()*ob.get());cout<<"copy

of

obj

has

i

value

of

";cout<<ob.get()<<"\n";}void

main(){

aClass

obj(10);sqr(obj);cout<<"But,

obj.i

isunchanged

in

main:";cout<<obj.get(

);}10.3.2

使用對(duì)象指針作為函數(shù)參數(shù)例10.8#include<iostream.h>class

aClass{

public:aClass(int

n)

{

i=n;

}void

set(int

n){

i=n;

}int

get(){

return

i;}pr

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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)論