版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
教學目的與要求:了解對象的綜合使用。掌握對象數(shù)組和對象指針的使用及對象作為函數(shù)參數(shù)。教學內(nèi)容提要:1、對象數(shù)組;2、與對象有關(guān)指針;3、對象作為函數(shù)參數(shù)教學重點:對象數(shù)組、對象指針。教學難點:對象數(shù)組、對象指針。教學進度:P74~P84教學過程:第10
講對象數(shù)組和指針及對象作為函數(shù)參數(shù)聲明:類名數(shù)組名[元素個數(shù)];訪問方法:數(shù)組名[下標] .
成員名對象數(shù)組的初始化:數(shù)組中每一個元素對象被創(chuàng)建時,系統(tǒng)都會調(diào)用類構(gòu)造函數(shù)初始化該對象。通過初始化列表賦值。例:Point
A[2]={Point(1,2),Point(3,4)};如果沒有為數(shù)組元素指定顯式初始值,數(shù)組元素便使用缺省值初始化(調(diào)用缺省構(gòu)造函數(shù))。【
10.1
對象數(shù)組】4.數(shù)組元素所屬類的構(gòu)造函數(shù):不聲明構(gòu)造函數(shù),則采用缺省構(gòu)造函數(shù)。各元素對象的初值要求為相同的值時,可以聲明具有缺省形參值的構(gòu)造函數(shù)。Point::Point(int
x=0,int
y=0){
X=x;
Y=y;}Point
obj[4];各元素對象的初值要求為不同的值時,需要聲明帶形參(無缺省值)的構(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)}當數(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.對象組應(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ū)ο蟆?.對象的指針聲明一個指針來保存對象的地址,這個指針就是指向?qū)ο蟮闹羔槪喎Q對象的指針。對象的指針的聲明方法與普通變量的指針相同。形式如下:類名*對象的指針名通過對象的指針間接訪問對象成員的方式相應(yīng)地表示為:(*對象的指針名).數(shù)據(jù)成員名
//訪問數(shù)據(jù)成員(*對象的指針名).成員函數(shù)名(參數(shù)表)//訪問成員函數(shù)注因為間接訪問運算符“*”的優(yōu)先級低于成員選擇運算符“.”,所以表達式中對象的指針名兩邊的圓括號不能省略?!?/p>
10.2
與對象有關(guān)的指針】例如—-聲明的類Cylinder,可做如下聲明和訪問:Cylinder
cylinder1;Cylinder
*pcylinder=&cylinder1;(*pcylinder).setcylinder(20.0,20.0);(*pcylinder).surfacearea();表述形式如下:對象的指針名->數(shù)據(jù)成員名;
//訪問數(shù)據(jù)成員對象的指針名->成員函數(shù)名(參數(shù)表);//訪問成員函數(shù)“->”也叫做成員選擇運算符,該運算符可用于通過對象的指針或結(jié)構(gòu)變量的指針來訪問其中的成員。例如—-聲明的類Cylinder,也可做如下聲明和訪問:Cylinder
cylinder1;Cylinder
*pcylinder=&cylinder1;pcylinder
->setcylinder(20.0,20.0);pcylinder->surfacearea();C++語言提供了另一個更常用的方法://聲明類class
Date{public:Date(int
y=2001,int
m=1,int
d=1); //帶默認值的構(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)//實現(xiàn)構(gòu)造函數(shù)使用對象的指針前也一定要給指針賦一個合法的值。例10.2
對象的指針的聲明與訪問#include<iostream.h>{
year=y;month=m;day=d;}void
Date::setDate(int
y,int
m,int
d)//實現(xiàn)改變?nèi)掌诘暮瘮?shù){
year=y;month=m;day=d;//實現(xiàn)輸出日期的函數(shù)}void
Date::showDate()
const{cout<<year<<“年”<<month<<“月”<<day<<“日”<<endl;}void
main(){Date
date;Date
*pdate=&date;//聲明對象//聲明對象的指針(續(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ù))//通過對象名訪問公有成員函數(shù)//通過對象的指針訪問公有成員函數(shù)由于this指針的隱含性,在一般情況下并不需要顯式標明。注調(diào)用一個對象的成員函數(shù)時,編譯系統(tǒng)會首先將這個對象的地址賦給被調(diào)用的成員函數(shù)中的this指針,然后再調(diào)用成員函數(shù)。成員函數(shù)訪問數(shù)據(jù)成員時就隱含地使用this指針來確保訪問到的數(shù)據(jù)成員屬于這個對象。2.
this指針比如:
Date::Date(int
y,int
m,int
d){this->day=d;}this->year=y;this->month=m;說明:顯式使用了this指針,明確地表示出成員函數(shù)當前所操作的數(shù)據(jù)成員所屬的對象。this指針也是一個指向?qū)ο蟮闹羔?,它隱含在類成員函數(shù)中,用來指向成員函數(shù)所屬類的正在被操作的對象。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;};//實現(xiàn)構(gòu)造函數(shù)Date::Date(int
y,int
m,int
d){this->year=y;//顯式使用this指針this->month=m;
//this指針指向正在被操作的對象例10.3this->day=d;}void
Date::setDate(int
y,int
m,int
d) //實現(xiàn)改變?nèi)掌诘暮瘮?shù)//顯式使用this指針//this指針指向正在操作的對象{
this->year=y;this->month=m;this->day=d;}void
Date::showDate()const //實現(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();//聲明對象//聲明對象的指針//通過對象名訪問公有成員函數(shù)//通過對象的指針訪問公有成員函數(shù)date.setDate(2001,6,30); //改變?nèi)掌冢ɡm(xù))date.showDate();date.showDate();pdate->showDate();}注靜態(tài)成員函數(shù)沒有this指針3.
指向類成員的指針類中的數(shù)據(jù)成員和成員函數(shù)在類實例化后在內(nèi)存中也有一定的存儲地址,可以聲明指向類成員的指針。通過這些指針,可以訪問對象的成員。指向成員函數(shù)的指針(簡稱成員函數(shù)指針)指向類成員的指針指向數(shù)據(jù)成員的指針(簡稱數(shù)據(jù)成員指針)pdate->showDate();pdate->setDate(2001,12,31);說明:顯式使用this指針所完的任務(wù)都可以由系統(tǒng)隱含完。(續(xù))在這里賦值也就是確定指針指向類中的哪一個成員。對于數(shù)據(jù)成員指針,賦值的形式如下:數(shù)據(jù)成員指針名=&類名::數(shù)據(jù)成員名對于下面聲明的類A
比如,
class
A{
public:...int
a;...};數(shù)據(jù)類型是指數(shù)據(jù)成員指針所指向的數(shù)據(jù)成員的類型。類名是數(shù)據(jù)成員所屬類的名稱。在使用前必須聲明并賦值聲明一個數(shù)據(jù)成員指針的形式如下:數(shù)據(jù)類型
類名::*數(shù)據(jù)成員指針名;int
A::*p=&A::a;等價int
A::*p;p=&A::a;由于類本身是一個類型,不是變量,系統(tǒng)并不為類分配內(nèi)存。在聲明
了指向類成員的指針后,還需要指定該類的一個對象來實例化這個類。注在使用時還必須通過指定的對象名或指向這個對象的指針來訪問數(shù)據(jù)成員指針所指向的成員。訪問數(shù)據(jù)成員的表述形式如下:對象名.*類成員指針名對象指針名->*類成員指針名//通過對象名訪問//通過對象的指針訪問可以用下式聲明指向這個類的數(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的對象a及指針pa,并讓對象pa
指向adouble
A::*px=&A::x;a.outputxy();//聲明指向類A的double型數(shù)據(jù)成員的指針//并使其指向公有成員x//調(diào)用成員函數(shù)輸出cout<<″a.x=\t″<<a.x<<endl;
//利用對象名直接訪問成員xcout<<″a.*px=\t″<<a.*px<<endl;
//利用對象名和數(shù)據(jù)成員指針//間
接訪問xcout<<″pa->*px=\t″<<pa->*px<<endl;
//利用對象的指針和//成員指針間接訪問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;}運行結(jié)果:Step
One:Default
Constructor
called.Destructor
called.Step
Two:Constructor
called.Destructor
called.{
//類的聲明同例,略};void
main(
){ Point
*Ptr=new
Point[2];//創(chuàng)建對象數(shù)組Ptr[0].Move(5,10);Ptr[1].Move(15,20);//通過指針訪問數(shù)組元素的成員//通過指針訪問數(shù)組元素的成員cout<<"Deleting..."<<endl;}delete[]Ptr;
//刪除整個對象數(shù)組運行結(jié)果:Default
Constructor
called.Default
Constructor
called.Deleting...Destructor
called.Destructor
called.例10.6#include<iostream.h>class
Point【10.3
向函數(shù)傳遞對象】10.3.1
使用對象作為函數(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
使用對象指針作為函數(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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年消防工程簡易分包協(xié)議2篇
- 2024年標準貨物裝卸作業(yè)合同樣本版B版
- 2024年度在線教育平臺普通合伙合同3篇
- 2025代理合同協(xié)議
- 2024年物業(yè)租賃續(xù)租合同協(xié)議
- 2025農(nóng)產(chǎn)品簡單購銷合同范本
- 2024年危險品運輸企業(yè)運輸車輛安全檢查及維修服務(wù)協(xié)議3篇
- 2024年寄賣商家銷售業(yè)績獎勵協(xié)議2篇
- 2024年度石膏板市場調(diào)研采購合同協(xié)議3篇
- 2025餐飲食品供貨合同范本
- 正念減壓療法PPT培訓課件
- 地鐵礦山法隧道施工技術(shù)
- 國家開放大學實驗學院生活中的法律第一單元測驗答案
- 平安個人信用貸款申請表
- 六年級語文課外閱讀(共20篇-含答案)
- 水利工程整體規(guī)劃及資源配置計劃
- 液氨使用與儲存安全技術(shù)規(guī)范
- 烤煙煙葉等級圖庫課件
- 純電動汽車整車控制器(VCU)設(shè)計方案
- (完整版)設(shè)計的進度計劃保證措施
- 7的乘法口訣說課--完整版PPT課件
評論
0/150
提交評論