版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第3章關(guān)于類和對(duì)象的進(jìn)一步討論
3.1構(gòu)造函數(shù)
3.2析構(gòu)函數(shù)
3.3調(diào)用構(gòu)造函數(shù)和析構(gòu)函數(shù)的順序
3.4對(duì)象數(shù)組
3.5對(duì)象指針
3.6共用數(shù)據(jù)的保護(hù)
3.7對(duì)象的動(dòng)態(tài)建立和釋放
3.8對(duì)象的賦值和復(fù)制
3.9靜態(tài)成員
3.10友元
3.H類模板
1/145
3.1構(gòu)造函數(shù)(constructor:ctor)
如果定義一個(gè)變量,而程序未對(duì)其進(jìn)行初始化的話,這個(gè)
變量的值是不確定的,因?yàn)閏和C++不會(huì)自覺(jué)地去為它賦
值。與此相似,如果定義一個(gè)對(duì)象,而程序未對(duì)其數(shù)據(jù)成
員進(jìn)行初始化的話,這個(gè)對(duì)象的值也是不確定的。
3.1.1對(duì)象的初始化
3.1.2構(gòu)造函數(shù)的作用
3.1.3帶參數(shù)的構(gòu)造函數(shù)
3.1.4用參數(shù)初始化表初始化數(shù)據(jù)成員
3.1.5構(gòu)造函數(shù)的重載
3.1.6使用默認(rèn)參數(shù)的構(gòu)造函數(shù)左0
#S
8Er小
2/145r?
:
311對(duì)象的初始化
?因?yàn)轭愂且环N類型,是創(chuàng)建對(duì)象的藍(lán)圖,系統(tǒng)不會(huì)為它分
配內(nèi)存空間。
?所以在定義類時(shí),不能給數(shù)據(jù)成員賦初值,要在建立對(duì)象
時(shí),給數(shù)據(jù)成員賦初值。否則對(duì)象的狀態(tài)是不確定的。
如果類單輸音纏成員是公有的,可以在定義對(duì)象時(shí)對(duì)
其數(shù)據(jù)嫡初始化。
例如:inthour;
intminute;在一個(gè)大括號(hào)內(nèi)順序列出各個(gè)公有
數(shù)據(jù)成員的值,在兩個(gè)值之間用逗
intsec;號(hào)分隔。注意這只能用于數(shù)據(jù)成員
都是公有的情況。
);
Timetl{15,36,26);
3/145
z\在前面的例子里,是用成員函數(shù)對(duì)對(duì)象的數(shù)據(jù)成員賦初值,
V如果一個(gè)類定義了多個(gè)對(duì)象,對(duì)每個(gè)對(duì)象都要調(diào)用成員函
數(shù)對(duì)數(shù)據(jù)成員賦初值,那么程序就會(huì)變得煩瑣,所以用成
員函數(shù)為數(shù)據(jù)成員賦初值絕不是一人好方法。按理說(shuō)對(duì)象
的創(chuàng)建跟上帝造萬(wàn)物一樣,萬(wàn)物誕生的時(shí)候都是有各自的
特征的。對(duì)象的初始屬性應(yīng)該是與生俱來(lái)的才是最自然的。
4/145
312構(gòu)造函數(shù)的作用
C++提供了構(gòu)造函數(shù)機(jī)制,用來(lái)為對(duì)象的數(shù)據(jù)成員進(jìn)
行初始化。在前面一直未提及這個(gè)概念,其實(shí)如果你未
設(shè)計(jì)構(gòu)造函數(shù),系統(tǒng)在創(chuàng)建對(duì)象時(shí),會(huì)自動(dòng)提供一個(gè)默
認(rèn)的構(gòu)造函數(shù),什么也不做。
構(gòu)造函數(shù)用于為對(duì)象初始化,它屬于某一個(gè)類,可以由系
統(tǒng)自動(dòng)生成。也可以由程序員編寫,程序員根據(jù)初始化的
要求設(shè)計(jì)構(gòu)造函數(shù)及函數(shù)參數(shù)。
構(gòu)造函數(shù)是一種特殊的成員函數(shù),在程序中不需要寫調(diào)用
語(yǔ)句,在系統(tǒng)建立對(duì)象時(shí)由系統(tǒng)自覺(jué)調(diào)用執(zhí)行。
5/145
構(gòu)造函數(shù)的特點(diǎn):
(1)構(gòu)造函數(shù)的名字與它的類名必須相同。
(2)它沒(méi)有類型,也不返回值
(3)它可以帶參數(shù),也可以不帶參數(shù)。
6/145
例3.1在例2.3的基礎(chǔ)上定義構(gòu)造成員函數(shù)
ttinclude<iostream>voidTime::set_time()
usingnamespacestd;
{cin>>hour;
classTime
cin>>minute;
(public:
Time()cin>>sec;
{hour=0;)
minute=0;
sec=0;
voidTime::show_time()
}
{
voidset_time();
voidshow_time();cout<<hour<<zz:〃:〃
private:<<sec<<endl;
inthour;
intminute;
intsec;
);
7/145
intmain()
在類Time中定義了構(gòu)造函數(shù)
Time,它與所在的類同名。
Timetl;在建立對(duì)象時(shí)自動(dòng)執(zhí)行構(gòu)造
tl.set_time();函數(shù),該函數(shù)的作用是為對(duì)
象中的各個(gè)數(shù)據(jù)成員賦初值
tl.show_time();
0o注意只有執(zhí)行構(gòu)造函數(shù)
Timet2;時(shí)才為數(shù)據(jù)成員賦初值。
t2.show_time();
return0;
8/145
程序運(yùn)行的情況為:
102554
10:25:54〃輸出tl的值
0:0:0//輸出t2的值
也可以在類內(nèi)聲明構(gòu)造函數(shù)然后在類外定義構(gòu)造函數(shù)。將
程序修改為:
Time();〃類內(nèi)聲明
然后在類外定義構(gòu)造函數(shù):
Time::Time()〃類外定義
{hour=0;
minute=0;
sec=0;
}9/145
1)關(guān)于構(gòu)造函數(shù)的使用
7
(1)什么時(shí)候調(diào)用構(gòu)造函數(shù)呢?當(dāng)函數(shù)執(zhí)行到對(duì)象401
句時(shí)建立對(duì)象,此時(shí)就要調(diào)用構(gòu)造函數(shù),對(duì)象就有了自己
的作用域,對(duì)象的生命周期開始了。
(2)構(gòu)造函數(shù)沒(méi)有返回值,因此不需要在定義中聲明類型。
(3)構(gòu)造函數(shù)不需要顯式地調(diào)用,構(gòu)造函數(shù)是在建立對(duì)象
日寸由系統(tǒng)自動(dòng)執(zhí)行的,且只執(zhí)行一次。構(gòu)造函數(shù)一般定義
為public。
(4)在構(gòu)造函數(shù)中除了可以對(duì)數(shù)據(jù)成員賦初值,還可以使
用其他語(yǔ)句。
(5)如果用戶沒(méi)有定義構(gòu)造函數(shù),C++系統(tǒng)會(huì)自動(dòng)生成一
個(gè)構(gòu)造函數(shù),而這個(gè)函數(shù)體是空的,不執(zhí)行初始化操作。
10/145
313帶形參數(shù)的構(gòu)造函數(shù)
可以采用帶參數(shù)的構(gòu)造函數(shù),使得對(duì)象取得初始確定值。
構(gòu)造函數(shù)格式:
構(gòu)造函數(shù)名(類型形參1,類型形參2,…)
Time(inth,intm,ints)
{hour=h;
minute二m;
sec二s;
}
在定義對(duì)象時(shí)指定實(shí)參,定義對(duì)象的格式為:
類名對(duì)象名(實(shí)參1,實(shí)參2,…);
Timetl(12,30,3禽45
例3.2有兩個(gè)長(zhǎng)方柱,其長(zhǎng)、寬、高分別為:
(1)12z25z30
(2)15z30z21
編寫程序,在類中用帶參數(shù)的構(gòu)造函數(shù),計(jì)算它們的體積。
分析:可以在類中定義一個(gè)計(jì)算長(zhǎng)方體體積的成員函數(shù)計(jì)
算對(duì)象的體積。
H
12/145
ttinclude<iostream>〃長(zhǎng)方體構(gòu)造函數(shù)
usingnamespacestd;Box::Box(inth,intw,intlen)
classBox{height=h;
{public:width=w;
Box(int,int,int);length=len;
intvolume();
//計(jì)算長(zhǎng)方體的體積
private:
intBox::volume()
intheight;
intwidth;return(height^width*length);
intlength;
);
13/145
intmain()
Boxboxl(12,25,30);//定義對(duì)象boxl
cout〈〈〃boxl體積=〃〈〈boxl.volume()<<endl;
Boxbox2(15,30,21);//定義對(duì)象box2
cout<<〃box2體積=〃〈〈box2.volume()<<endl;
return0;
}____________________________________________
O提醒:
(1)帶形參的構(gòu)造函數(shù)在定義對(duì)象時(shí)必須指定實(shí)參
(2)用這種方法可以實(shí)現(xiàn)不同對(duì)象的不同的初始化。
14/145
Note
314用參數(shù)初始化表對(duì)數(shù)據(jù)成員初始化
C++提供了參數(shù)初始化表的方法對(duì)數(shù)據(jù)成員初始化。這種方法不必在構(gòu)
造函數(shù)內(nèi)對(duì)數(shù)據(jù)成員初始化,在函數(shù)的首部就能實(shí)現(xiàn)數(shù)據(jù)成員初始化。
函數(shù)名(類型1形參1,類型2形參2):成員名1(形參1),成員名2(形參2)
{}〃函數(shù)體可以為空。
Time(inth,intm,ints):hour(h),minute(m),sec(s)
功能:執(zhí)行構(gòu)造函數(shù)時(shí),將形參1的值賦予成員1,將形參2的值賦予成
員2,形參的值由定義對(duì)象時(shí)的提供的實(shí)參值決定。
此時(shí)定義對(duì)象的格式依然是帶實(shí)參的形式:
類名對(duì)象名(實(shí)參1,實(shí)參2);
Timetl(8,7,6);
15/145
:
例:定義帶形參初始化表的構(gòu)造函數(shù)
Box::Box(inth,intw,intlen):height(h),
width(w),length(len){}||
冒號(hào)作為分隔符
定義對(duì)象:
Boxboxl(12,25,30);|
...逗號(hào)分隔的初始化列表
Boxbox2(15,30,21);
16/145
315構(gòu)造函數(shù)的重載
構(gòu)造函數(shù)也可以重載。一個(gè)類可以有多個(gè)同名構(gòu)造函數(shù),
函數(shù)參數(shù)的個(gè)數(shù)、參數(shù)的類型各不相同。
例3.3:在例3.2的基礎(chǔ)上定義兩個(gè)構(gòu)造函數(shù)其中一個(gè)無(wú)參
數(shù),另一個(gè)有參數(shù)。
17/145
ttinclude<iostream>
usingnamespacestd;
classBox
{public:
Box();x.
Box(inth,,intlen)height(h),
width(w),length(leSl{}
intvolume();
private:\
intheight;\Box::Box()
intwidth;\{height=10;
}intBox::volume()
intlength;\wliedntght=h1=01;0;
{return(height*width*length);
);
I18)145
intmain()
Boxboxl;
cout<<z/boxl體積二〃<<boxl.volume()<<endl;
Boxbox2(15,30,25);
cout<<zzbox2體積二〃<<box2.volume()<<endl;
return0;
例子中定義了兩個(gè)構(gòu)造函數(shù),一個(gè)無(wú)參數(shù)另一個(gè)帶三個(gè)參
數(shù)。系統(tǒng)根據(jù)對(duì)象定義的形式?jīng)Q定調(diào)用哪個(gè)構(gòu)造函數(shù)。
對(duì)象boxl沒(méi)有實(shí)參,系統(tǒng)調(diào)用無(wú)參數(shù)的構(gòu)造函數(shù);對(duì)象box2
帶三個(gè)實(shí)參,系統(tǒng)調(diào)用帶形參的構(gòu)造函數(shù)。
說(shuō)明:
_(1)不帶形參的構(gòu)造函數(shù)為默認(rèn)構(gòu)造函數(shù),每個(gè)類只有一
一個(gè)默認(rèn)構(gòu)造函數(shù),如果只定義無(wú)參對(duì)象,則系統(tǒng)自動(dòng)提供
空白構(gòu)造函數(shù)。如果既有無(wú)參對(duì)象也有帶參對(duì)象,必須人
為定義一個(gè)無(wú)參構(gòu)造函數(shù)。
(2)雖然每個(gè)類可以包含多個(gè)構(gòu)造函數(shù),但是創(chuàng)建對(duì)象時(shí),
系統(tǒng)僅執(zhí)行其中一個(gè)。
20/145
316使用默認(rèn)參數(shù)值的構(gòu)造函數(shù)
?C++允許在構(gòu)造函數(shù)里為形參指定默認(rèn)值,如果創(chuàng)建對(duì)象時(shí),
未給出相應(yīng)的實(shí)參時(shí),系統(tǒng)將用形參的默認(rèn)值為形參賦值。
格式:
函數(shù)名(類型形參上常數(shù),類型形參2二常數(shù),…);
例3.4:將例3.3中的構(gòu)造函數(shù)改用帶默認(rèn)值的參數(shù),長(zhǎng)、寬、
高的默認(rèn)值都是10。
21/145
ttinclude<iostream>
usingnamespacestd;
classBox
(public:
Box(intw=10,inth=10,intlen=10);
intvolume();
private:
intheight;
intwidth;
intlength;
);
22/145
Box::Box(intw,inth,intlen)
{height=h;
width=w;
length=len;
}
intBox::volume()
{return(height*width*length)
23/145
intmain()
(
Boxboxl;
cout<<z/boxl體積=z,<<boxl.volume()<<endl;
Boxbox2(15);
cout<<z/box2體積zz<<box2.volume()<<endl;
Boxbox3(15,30);
cout<<z/box3體積zz<<box3.volume()<<endl;
Boxbox4(15,30,20);
cout<<z/box4體積〃〈〈box4.volume()<<endl;
return0;
24/145
程序運(yùn)行結(jié)果為:
boxl體積=1000
box2體積=1500
box3體積=4500
box4體積二9000
構(gòu)造函數(shù)也可以改寫成帶參數(shù)初始化表的形式:
Box::Box(inth,intw,intlen):height(h),
width(w),length(len){}
整個(gè)函數(shù)只需一行,簡(jiǎn)單方便。
25/145
在構(gòu)造函數(shù)中使用默認(rèn)參數(shù)提供了建立對(duì)象的多種選擇,
它的作用相當(dāng)于多個(gè)重載構(gòu)造函數(shù)。
說(shuō)明:
(1)如果在類外定義構(gòu)造函數(shù),應(yīng)該在聲明構(gòu)造函數(shù)時(shí)指
足默認(rèn)參數(shù)值,在定義函數(shù)時(shí)可以不再指定默認(rèn)參數(shù)值。
在相反情況下,如果定義了無(wú)參對(duì)象,則編譯器報(bào)錯(cuò):沒(méi)
有合適的構(gòu)造函數(shù)。
(2)在聲明構(gòu)造函數(shù)時(shí),形參名可以省略例如:
Box(int=10,int=10,int=10);
等號(hào)不可省略。、
26/145
(3)如果構(gòu)造函數(shù)的所有形參都指定了默認(rèn)值,在定義對(duì)
象時(shí),可以指定實(shí)參也可不指定實(shí)參。由于不指定實(shí)參也
可以調(diào)用構(gòu)造函數(shù),因此全部形參都指定了默認(rèn)值的構(gòu)造
函數(shù)也屬于默認(rèn)構(gòu)造函數(shù)。為了避免歧義,不允許同時(shí)定
義不帶形參的構(gòu)造函數(shù)和全部形參都指定默認(rèn)值的構(gòu)造函
數(shù)。
(4)同樣為了避免歧義性,如定義了全部形參帶默認(rèn)值的
構(gòu)造函數(shù)后,不能再定義重載構(gòu)造函數(shù)。反之亦然。
27/145
Box(int=10,int=10,int=10);
Box();
Box(int,int);
若定義對(duì)象:
Boxboxl;
Boxbox2(15,30);
這時(shí)應(yīng)該調(diào)用哪個(gè)構(gòu)造函數(shù)呢?J
如果構(gòu)造函數(shù)中參數(shù)并非都帶默認(rèn)值時(shí),要具體分析情況。
如有以下三個(gè)原型聲明:
28/145
Box();
Box(int,int=10,int=10);
Box(int,int);
若定義對(duì)象:
Boxboxl;〃正確,調(diào)用第一個(gè)
Boxbox2(15);//調(diào)用第二個(gè)
Boxbox3(15,30);//不知調(diào)用哪一個(gè)
因此不要同時(shí)使用重載構(gòu)造函數(shù)和帶默認(rèn)值的構(gòu)造函數(shù)。
■
n
29/145W
3.1構(gòu)造函數(shù)
3.2析構(gòu)函數(shù)
3.3調(diào)用構(gòu)造函數(shù)和析構(gòu)函數(shù)的順序
3.4對(duì)象數(shù)組
3.5對(duì)象指針
3.6共用數(shù)據(jù)的保護(hù)
3.7對(duì)象的動(dòng)態(tài)建立和釋放
3.8對(duì)象的賦值和復(fù)制
3.9靜態(tài)成員
3.10友元U
3.11類模板.
30/145S
3.2析構(gòu)函數(shù)(destructor:dtor)
析構(gòu)函數(shù)也是個(gè)特殊的成員函數(shù),它的作用與構(gòu)造函數(shù)相
反,當(dāng)對(duì)象的生命周期結(jié)束時(shí),系統(tǒng)自動(dòng)調(diào)用析構(gòu)函數(shù),
收回對(duì)象占用的內(nèi)存空間。
執(zhí)行析構(gòu)函數(shù)的時(shí)機(jī):
①在一個(gè)函數(shù)內(nèi)定義的對(duì)象,當(dāng)這個(gè)函數(shù)結(jié)束時(shí),自動(dòng)執(zhí)行
析構(gòu)函數(shù)釋放對(duì)象。
②static局部對(duì)象要到main函數(shù)結(jié)束或執(zhí)行exit命令時(shí)才
自動(dòng)執(zhí)行析構(gòu)函數(shù)釋放對(duì)象。
③全局對(duì)象(在函數(shù)外定義的對(duì)象)當(dāng)main函數(shù)結(jié)束或執(zhí)
行exit命令時(shí)自動(dòng)執(zhí)行析構(gòu)函數(shù)釋放對(duì)象。
④如果用new建立動(dòng)態(tài)對(duì)象,用delete時(shí)自動(dòng)執(zhí)行析構(gòu)函數(shù)
釋放對(duì)象。
31/145
析構(gòu)函數(shù)的特征
①析構(gòu)函數(shù)名以符號(hào)開始后跟類名
②析構(gòu)函數(shù)沒(méi)有數(shù)據(jù)類型、返回值、形參。由于沒(méi)有形參
所以析構(gòu)函數(shù)不能重載。一個(gè)類只有一個(gè)析構(gòu)函數(shù)。
③如果程序員沒(méi)有定義析構(gòu)函數(shù),C++編譯系統(tǒng)會(huì)自動(dòng)生成
一個(gè)析構(gòu)函數(shù)。
析構(gòu)函數(shù)除了釋放對(duì)象(資源)外,還可以執(zhí)行程序員在
最后一次使用對(duì)象后希望執(zhí)行的任何操作。例如輸出有關(guān)
的信息。
32/145
例3.5包含構(gòu)造函數(shù)和析構(gòu)函數(shù)的C++程序
ttinclude<iostream>
ttinclude<string>
usingnamespacestd;
classStudent
{public:
Student(intn,stringnam,chars)
{num=n;
name=nam;
sex二s;
cout<<z/Construetorcalled.z/<<endl;
33/145
Student()
{cout<<z,Destruetorcalled.z/<<endl;}
voiddisplay()
{cout<<z/num:z/<<num<<endl;
cout<<z/name:zz<<name<<endl;
cout<<z/sex:z/<<sex<<endl<<endl;
}
private:
intnum;
stringname;
charsex;
);
34/145
intmain()
{Studentstudl(10010,z,Wang_liz,,,f?);
studl.display();
Studentstud2(10011,〃Zhang_fun〃,';
stud2.display();
return0;
n
35/145
main函數(shù)前聲明的類其作用域是全局的。
程序運(yùn)行結(jié)果如下:
Constructorcalled.
num:10010
name:Wang_li
sex:f
Constructorcalled.
num:10011
name:Zhangfun
sex:m
Destructorcalled.
Destructorcalled.
36/145
3.1構(gòu)造函數(shù)
3.2析構(gòu)函數(shù)
3.3調(diào)用構(gòu)造函數(shù)和析構(gòu)函數(shù)的順序
3.4對(duì)象數(shù)組
3.5對(duì)象指針
3.6共用數(shù)據(jù)的保護(hù)
3.7對(duì)象的動(dòng)態(tài)建立和釋放
3.8對(duì)象的賦值和復(fù)制
3.9靜態(tài)成員
3.10友元■
類模板Cm
3.HC
Mi
37/145.蠢
3.3調(diào)用構(gòu)造函數(shù)和析構(gòu)函數(shù)的順序
?在使用構(gòu)造函數(shù)和析構(gòu)函數(shù)時(shí)需要特別注意對(duì)它們的調(diào)用
時(shí)間和調(diào)用順序。
?在一般情況下,調(diào)用析構(gòu)函數(shù)的次序與調(diào)用構(gòu)造函數(shù)的次
序恰好相反:最先調(diào)用構(gòu)造函數(shù)的對(duì)象,最后調(diào)用析構(gòu)函
數(shù)。而最后調(diào)用構(gòu)造函數(shù)的對(duì)象,最先調(diào)用析構(gòu)函數(shù)???/p>
簡(jiǎn)記為:先構(gòu)造的后析構(gòu),后構(gòu)造的先析構(gòu),它相當(dāng)于一
個(gè)棧,后進(jìn)先出。
38/145
對(duì)象1的對(duì)象1的
構(gòu)造函數(shù)析構(gòu)函數(shù)
對(duì)象2的對(duì)象2的
構(gòu)造函數(shù)析構(gòu)函數(shù)
對(duì)象3的[對(duì)象3的
構(gòu)造函數(shù)"I析構(gòu)函數(shù)
39/145
構(gòu)造析構(gòu)順序總結(jié):
在一般情況下,調(diào)用析構(gòu)函數(shù)的次序與調(diào)用構(gòu)造函數(shù)
的次序相反,這是對(duì)同一類存儲(chǔ)類別的對(duì)象而言的。
⑴在全局范圍中定義的對(duì)象(在所有函數(shù)之外定義的對(duì)
象),在主函數(shù)執(zhí)行前調(diào)用構(gòu)造函數(shù)。當(dāng)主函數(shù)結(jié)束時(shí),
調(diào)用析構(gòu)函數(shù)。
⑵在函數(shù)中定義靜態(tài)局部對(duì)象,則在第一次調(diào)用該函
數(shù)建立對(duì)象時(shí)調(diào)用構(gòu)造函數(shù),在主函數(shù)結(jié)束或調(diào)用
exit函數(shù)時(shí)才調(diào)用析構(gòu)函數(shù)。
⑶局部自動(dòng)對(duì)象,在創(chuàng)建對(duì)象時(shí)調(diào)用構(gòu)造函數(shù)。如多次調(diào)
用對(duì)象所在的函數(shù),則每次創(chuàng)建對(duì)象時(shí)都調(diào)用構(gòu)造函數(shù)。
在函數(shù)調(diào)用結(jié)束時(shí)調(diào)用析構(gòu)函數(shù)。
40/145
例如:
Voidfn()
{studentstl;〃定義局部自動(dòng)對(duì)象
staticstudentst2;〃定義靜態(tài)局部對(duì)象
???
)
對(duì)象stl是每次調(diào)用函數(shù)fn時(shí)調(diào)用構(gòu)造函數(shù),在函數(shù)fn結(jié)
束時(shí)調(diào)用析構(gòu)函數(shù)。
對(duì)象st2是第一次調(diào)用函數(shù)fn時(shí)調(diào)用構(gòu)造函數(shù),在函數(shù)fn
結(jié)束時(shí)并不調(diào)用析構(gòu)函數(shù),在到主函數(shù)結(jié)束時(shí)才調(diào)用析構(gòu)
函數(shù)。
41/145
3.1構(gòu)造函數(shù)
3.2析構(gòu)函數(shù)
3.3調(diào)用構(gòu)造函數(shù)和析構(gòu)函數(shù)的順序
3.4對(duì)象數(shù)組
3.5對(duì)象指針
3.6共用數(shù)據(jù)的保護(hù)
3.7對(duì)象的動(dòng)態(tài)建立和釋放
3.8對(duì)象的賦值和復(fù)制
3.9靜態(tài)成員
3.10友元
3.H類模板
42/145
3.4對(duì)象數(shù)組(較少使用)
類是一種特殊的數(shù)據(jù)類型,它當(dāng)然是C++的合法類型,
自然就可以定義對(duì)象數(shù)組。在一個(gè)對(duì)象數(shù)組中各個(gè)元素
都是同類對(duì)象例如一個(gè)班級(jí)有50個(gè)學(xué)生,每個(gè)學(xué)生具有
學(xué)號(hào)、年齡、成績(jī)等屬性,可以為這個(gè)班級(jí)建立一個(gè)對(duì)
象數(shù)組,數(shù)組包括了50個(gè)元素:
studentstd[50];
給數(shù)組初始化時(shí),不可以用如下形式:
Studentstu[3]={1,7,6};
43/145
錯(cuò)誤提示:分別在DevC++和VC++6.0下
23};
24intmain()
{Studentstu[3]={l,7,6};
5.5八..,犍QfnrnldiQnln\fCy?
intmain()
〈Studentstu[3]=<1,7,6};
stu[0].displayO;
stu[1].displayO;
stu[2].displayO;
return0;
}
I
■ration:defaultparal-Win32Debug
|MyProjects\defaultpara1\dest?cpp(26)::errorC244G:'initializing':cannotconuertfrom'constint'to'classStudent
tudioVMyProiecl.conversionfrom'inftonon-scalartype'Student1requested
tudio\MyProject..conversionfrom'inftonon-scalartype'Student1requested
44/145
數(shù)組的正確初始化
如果構(gòu)造函數(shù)有多個(gè)參數(shù),在花括號(hào)中為每個(gè)對(duì)象分別寫
上構(gòu)造函數(shù)并指定實(shí)參。格式為:
studentst[n]={student(實(shí)參1,實(shí)參2,實(shí)參3);
??????
student(實(shí)參1',實(shí)參2',實(shí)參3');
);
45/145
初始化數(shù)組樣例
假定對(duì)象有三個(gè)數(shù)據(jù)成員:學(xué)號(hào)、年齡、成績(jī)。下面定義
有三個(gè)學(xué)生的對(duì)象數(shù)組:
studentstd[3]={student(1001,18,87),
student(1002,19,76),
student(1003,18,80)
);〃構(gòu)造函數(shù)帶實(shí)參
在建立對(duì)象數(shù)組時(shí),分別調(diào)用構(gòu)造函數(shù),對(duì)每個(gè)對(duì)象初始
化。每個(gè)元素的實(shí)參用括號(hào)括起來(lái),實(shí)參的位置與構(gòu)造函
數(shù)形參的位置一一對(duì)應(yīng)。
46/145
例3.6對(duì)象數(shù)組的使用方法。(長(zhǎng)方體數(shù)組)
#include<iostream>
usingnamespacestd;
classBox
{public:
Box(inth=10zintw=12,intlen=15):height(h)/width(w)/length(len)
{}〃帶默認(rèn)參數(shù)值和參數(shù)表
intvolume();
private:
intheight;
intwidth;
intlength;
);
47/145
intBox::volume()
{return(height*width*length);}
intmain()
Boxa[3]={Box(10,12,15),〃每個(gè)數(shù)組元素是一個(gè)對(duì)象
Box(15,18,20),
Box(16,20,26)};
cout<<”a[0]的體積是"<<a[0].volume()<<endl;
cout<<”a[l]的體積是"<<a[l].volume()<<endl;
cout<<”a[2]的體積是"<<a[2].volume()<<endl;
return0;
)
48/145
3.1構(gòu)造函數(shù)
3.2析構(gòu)函數(shù)
3.3調(diào)用構(gòu)造函數(shù)和析構(gòu)函數(shù)的順序
3.4對(duì)象數(shù)組
3.5對(duì)象指針
3.6共用數(shù)據(jù)的保護(hù)
3.7對(duì)象的動(dòng)態(tài)建立和釋放
3.8對(duì)象的賦值和復(fù)制
3.9靜態(tài)成員
3.10友元
3.H類模板
49/145
3.5對(duì)象指針
指針的含義是內(nèi)存單元的地址,可以指向一般的變量,也
可以指向?qū)ο蟆?/p>
50/145
3.5.1指向?qū)ο蟮闹羔?/p>
3.5.2指向?qū)ο蟪蓡T的指針
3.5.3this指針
51/145
351指向?qū)ο蟮闹羔?/p>
■對(duì)象在內(nèi)存占據(jù)一片連續(xù)的內(nèi)存空間,CPU都按地址訪問(wèn)內(nèi)
存,對(duì)象在內(nèi)存的起始地址稱為對(duì)象指針。
定義對(duì)象的指針變量以保存對(duì)象的地址,方便引用對(duì)象成員,
格式如下:
類名*變量名;
Student*pstu;
定義好指針變量后,必須先給賦予合法的地址后才能使用。
一般是通過(guò)取地址運(yùn)算取得另外一對(duì)象的地址,然后賦給
指針變量。
八Studentstul;
'?\pstu=&stul;
要用與對(duì)象類型相同的指針變量保存運(yùn)算的結(jié)果。
rfB㈤F
52/145
classTimevoidTime::set_time()
(public:{cin>>hour;
Time()cin>>minute;
{hour=0;cin>>sec;
minute=0;}
sec=0;voidTime::show_time()
){cout<<hour<</z:〃:〃〈〈sec〈
voidset_time();<endl;
voidshow_time();
private:
inthour;
intminute;
intsec;
);
53/145
在此基礎(chǔ)上,有以下語(yǔ)句:
intmain()
(Time*pt;//定義pt是指向Time類對(duì)象的指針
Timetl;//定義Time類對(duì)象tl
pt=&tl;//將對(duì)象tl的地址賦予pt
(*pt).show_time()〃用指針變量訪問(wèn)對(duì)象的成員。
pt->show_time()
54/145
3.5.2指向?qū)ο蟪蓡T的指針
對(duì)象由成員組成。對(duì)象占據(jù)的內(nèi)存區(qū)是各個(gè)數(shù)據(jù)成員占據(jù)
的內(nèi)存區(qū)的總和。對(duì)象成員也有地址,即指針。
「指向數(shù)據(jù)成員的指針
指針
I指向成員函數(shù)的指針。
H
55/145
1.指向?qū)ο蠊袛?shù)據(jù)成員的指針
①定義數(shù)據(jù)成員的指針變量
數(shù)據(jù)類型*指針變量名
②取得公有數(shù)據(jù)成員的地址
&對(duì)象名.成員名
這里的數(shù)據(jù)類型是數(shù)據(jù)成員的數(shù)據(jù)類型。
例:
Timetl;
int*pl;//定義一個(gè)指向整型數(shù)據(jù)的指針變量
pl=&tl.hour;〃假定hour是公有成員
cout<<*pl<<endl;
,二
?實(shí)際上類的數(shù)據(jù)成員是不公開的。所以這個(gè)方法不常用。
56/145
2.指向?qū)ο蟪蓡T函數(shù)的指針
①定義指向成員函數(shù)的指針變量
數(shù)據(jù)類型(類名::*變量名)(形參表);
void(Student::*pf)();
數(shù)據(jù)類型:成員函數(shù)的類型。
類名:對(duì)象所屬的類
變量名:按標(biāo)識(shí)符規(guī)則取名
形參表:指定成員函數(shù)的形參表(形參個(gè)數(shù)、類型)
②取成員函數(shù)的地址
&類名::成員函數(shù)名
&Student::display
在VC++系統(tǒng)中,也可以不寫&。為了與C語(yǔ)言一致,建議不要省略
57/145
③給指針變量賦初值
指針變量名二&類名::成員函數(shù)名;
④用指針變量調(diào)用成員函數(shù)
(對(duì)象名.*指針變量名)([實(shí)參表]);
對(duì)象名:是指定調(diào)用成員函數(shù)的對(duì)象。
*:明確其后的是一個(gè)指針變量。
實(shí)參表:與成員函數(shù)的形參表對(duì)應(yīng),如無(wú)形參,可以省略
實(shí)參表。
■
3
58/145
例3.7有關(guān)對(duì)象指針的使用方法
ttinclude<iostream>Time::Time(inth,intm,ints)
usingnamespacestd;{hour=h;
classTimeminute=m;
{public:sec=s;
Time(int,int,int)
voidTime::get_time()
inthour;
intminute;{cout<<hour<<z/://<<minute<</,:/z<<sec<
intsec;<endl;}
voidgettime();
為了比較指向數(shù)據(jù)成員和函數(shù)成員的指針。
把數(shù)據(jù)成員也聲明為公有的。一般不要這
么做。
59/145
intmain()
{Timetl(10,13,56);
int*pl=&tl.hour;//定義指向成員的指針pl
cout<<*pl<<endl;
tl.get_time();//調(diào)用成員函數(shù)
Time*p2=&tl;//定義指向?qū)ο髏l的指針p2
p2->get_time();〃用對(duì)象指針調(diào)用成員函數(shù)
void(Time::*p3)();71定義指向成員函數(shù)的指針
p3=&Time::gettime;/給成員函數(shù)的指針賦值
(tl.*p3)();//用指向成員函數(shù)的指針調(diào)用成員函數(shù)
retur
,/;1-V,
函數(shù)成員指針的聲明賦值和引用。
60/145
程序運(yùn)行結(jié)果為:
10〃*pl的值
10:13:56//tl.get_time();的執(zhí)行結(jié)果
10:13:56//p2->get_time();的執(zhí)行結(jié)果
10:13:56//(tl.*p3)();的執(zhí)行結(jié)果
程序采用了三種方法輸出tl的hour,minute,sec的值
說(shuō)明:
(1)成員函數(shù)的起始地址的正確表示是:
&類名::成員函數(shù)名。
不要寫成:p3=&tl.get_time;
但是寫成:P3=tl.get_time;倒是可以,請(qǐng)思考為什么?
(2)主函數(shù)的第8和9行可以合并寫成:
void(Time::*p3)()=&Time::gettime;
61/145
3.5.3this指針
一個(gè)類的成員函數(shù)只有一個(gè)內(nèi)存拷貝。類中不論哪個(gè)對(duì)象調(diào)用
某個(gè)成員函數(shù),調(diào)用的都是內(nèi)存中同一個(gè)成員函數(shù)代碼。例如
Time類一個(gè)成員函數(shù):
voidTime::get_time()
{cout<<hour<<z/:〃:'z<<sec<<endl;}
tl.get_time();
t2.get_time();
當(dāng)不同對(duì)象的成員函數(shù)訪問(wèn)數(shù)據(jù)成員時(shí),怎么保證訪問(wèn)的就是
指定對(duì)象的數(shù)據(jù)成員?
S其實(shí)每個(gè)成員函數(shù)中都包含一個(gè)特殊的指針,它的名字
是thiso它是指向本類對(duì)象的指針,
62/145
當(dāng)對(duì)象調(diào)用成員函數(shù)時(shí),它的值就是該對(duì)象的起始地址。
所以為了區(qū)分不同對(duì)象訪問(wèn)成員函數(shù),語(yǔ)法要求調(diào)用成員
函數(shù)格式是:
intB熨鐮?鷹函數(shù)名(實(shí)參表)
從語(yǔ)法搬鮑浦搞錦標(biāo)豳廨用成員函數(shù)。
程悌霆甄印編譯器把對(duì)象的地址即this指針?lè)旁贓CX寄
贛霰麻瞑懿硼口成員函數(shù)定義如下:
{return(this->height*this->width*this->length);}
63/145
對(duì)于計(jì)算長(zhǎng)方體體積的成員函數(shù)volume,當(dāng)對(duì)象a調(diào)用它時(shí),
就把對(duì)象a地址給this指針,編譯程序?qū)的地址作為實(shí)參傳
給成員函數(shù):
a.volume(&a);
函數(shù)體變成:
(this->height)*(this->width)*(this->length)
等價(jià)于:(a.height)*(a.width)*(a.length)
C++通過(guò)編譯程序,在對(duì)象調(diào)用成員函數(shù)時(shí),把對(duì)象的地
址賦予this指針,用this指針指向?qū)ο?,?shí)現(xiàn)了用同一
個(gè)成員函數(shù)訪問(wèn)不同對(duì)象的數(shù)據(jù)成員。
64/145
可以用(*this)表示調(diào)用成員函數(shù)的對(duì)象。
(*this)就是this所指的對(duì)象。如前面的計(jì)算長(zhǎng)方體體積
的函數(shù)中return語(yǔ)句可以寫成:
return((*this).height*(*this).width*(*this).
length);
注意this兩側(cè)的括號(hào)不能省略,不能寫成:
return(*this.height**this.width**this.length);
根據(jù)運(yùn)算符優(yōu)先級(jí)語(yǔ)句被翻譯成:*(this,height),而
this.height是非法的,編譯將報(bào)錯(cuò)。
65/145
:
3.1構(gòu)造函數(shù)
3.2析構(gòu)函數(shù)
3.3調(diào)用構(gòu)造函數(shù)和析構(gòu)函數(shù)的順序
3.4對(duì)象數(shù)組
3.5對(duì)象指針
3.6共用數(shù)據(jù)的保護(hù)
3.7對(duì)象的動(dòng)態(tài)建立和釋放
3.8對(duì)象的賦值和復(fù)制
3.9靜態(tài)成員
3.10友元
3.H類模板
66/145
3.6共用數(shù)據(jù)的保護(hù)
如果既希望數(shù)據(jù)在一定范圍內(nèi)共享,又不愿它被隨意修改,
從技術(shù)上可以把數(shù)據(jù)指定為只讀型的。C++提供const手段,
將數(shù)據(jù)、對(duì)象、成員函數(shù)指定為常量,從而實(shí)現(xiàn)了只讀要
求,達(dá)到保護(hù)數(shù)據(jù)的目的。
67/145
3.6.1常對(duì)象
3.6.2常對(duì)'象成員
3.6.3指向?qū)ο蟮某V羔?/p>
*3.6.4指向常對(duì)象的指針變量
3.6.5對(duì)象的常引用
3.6.6const型數(shù)據(jù)小結(jié)
68/145
3.6.1常對(duì)象
菽:const類名對(duì)象名(實(shí)參表);
或:類名const對(duì)象名(實(shí)參表);
把對(duì)象定義為常對(duì)象,對(duì)象中的數(shù)據(jù)成員就是常變量,在
定義時(shí)必須給數(shù)據(jù)成員的初值,因?yàn)樵诔绦蛑胁辉试S修改
常對(duì)象的數(shù)據(jù)成員值。
如果常對(duì)象的成員函數(shù)不是常成員函數(shù)(除構(gòu)造函數(shù)和析
構(gòu)函數(shù)外),則外界不能調(diào)用此對(duì)象的成員函數(shù)。
如:constTime11(10,15,36);
tl.get_time();//錯(cuò)誤,不能調(diào)用
為了訪問(wèn)常對(duì)象中的數(shù)據(jù)成員,要定義常成員函數(shù):1
voidget_time()const-
即使加上了const,該函觸不能修改對(duì)象數(shù)據(jù)成員。
如果在常對(duì)象中要修改某個(gè)數(shù)據(jù)成員,C++提供了指定可變
的數(shù)據(jù)成員方法。
格式:mutable類型數(shù)據(jù)成員;
在定義數(shù)據(jù)成員時(shí)加mutable后,將數(shù)據(jù)成員聲明為可變的
數(shù)據(jù)成員,就可以用聲明為cons珀勺成員函數(shù)修改它的值。
H
70/145
3.6.2常對(duì)象成員
可以在聲明普通對(duì)象時(shí)將數(shù)據(jù)成員或成員函數(shù)聲明為常數(shù)
據(jù)成員或常成員函數(shù)。
71/145
1.常數(shù)據(jù)成員
格式:const類型數(shù)據(jù)成員名
將類中的數(shù)據(jù)成員定義為具有只讀的性質(zhì)。
注意:只能通過(guò)帶參數(shù)初始表的構(gòu)造函數(shù)對(duì)常數(shù)據(jù)成員進(jìn)
行初始化。
例:constinthour;
Time::Time(inth)
{hour=h;…}〃錯(cuò)誤
應(yīng)該寫成:
Time::Time(inth):hour
72/145
在類中聲明了某個(gè)常數(shù)據(jù)成員后,該類中每個(gè)對(duì)象的這個(gè)
數(shù)據(jù)成員的值都是只讀的,而每個(gè)對(duì)象的這個(gè)數(shù)據(jù)成員的
值可以不同,由定義對(duì)象時(shí)給出。
73/145
2.常成員函數(shù)
定義格式:
類型函數(shù)名(形參表)const;
const是函數(shù)類型的一部分,在聲明函數(shù)原型和定義函數(shù)
時(shí)都要用const關(guān)鍵字。
74/145
使用常成員函數(shù)需注意:
“const是函數(shù)類型的一個(gè)組成部分,因此在函數(shù)的實(shí)現(xiàn)部分
也要使用關(guān)鍵字ccmsto
0常成員函數(shù)不能修改對(duì)象的數(shù)據(jù)成員,也不能調(diào)用該類中
沒(méi)有由關(guān)鍵字const修飾的成員函數(shù),從而保證了在常成員
函數(shù)中不會(huì)修改數(shù)據(jù)成員的值。
0如果一個(gè)對(duì)象被說(shuō)明為常對(duì)象,則只能調(diào)用它的常成員函
數(shù)。
般成員函數(shù)可以訪問(wèn)或修改本類中的非const數(shù)據(jù)成員。而常成員函
數(shù)只能讀本類中的數(shù)據(jù)成員,而不能寫它們。
75/145
成員函數(shù)與成員數(shù)據(jù)的關(guān)系
HIXJ吊數(shù)據(jù)成員.二常函數(shù)成員
:、、/
、、XZ
、t常對(duì)象數(shù)據(jù)成員
---------A讀操作實(shí)線表示可操作
V--------寫操作虛線表7F不用操作
76/145
常成員函數(shù)小結(jié):
⑴如果類中有部分?jǐn)?shù)據(jù)成員的值要求為只讀,可以將它們
聲明為const,這樣成員函數(shù)只能讀這些數(shù)據(jù)成員的值,但
不能修改它們的值。
⑵如果所有數(shù)據(jù)成員的值為只讀,可將對(duì)象聲明為const,
在類中必須聲明const成員函數(shù),常對(duì)象只能通過(guò)常成員
函數(shù)讀數(shù)據(jù)成員。
⑶常對(duì)象不能調(diào)用非const成員函數(shù)。
提醒:如果常對(duì)象的成員函數(shù)未加const,編譯系統(tǒng)將其當(dāng)
作非const成員函數(shù);常成員函數(shù)不能調(diào)用非const成員函
■
3
77/145
3.6.3指向?qū)ο蟮某V羔?/p>
如果在定義指向?qū)ο蟮闹羔槙r(shí),使用了關(guān)鍵字const,匕
就是一個(gè)常指針,必須在定義時(shí)對(duì)其初始化。并且在程序
運(yùn)行中不能再修改指針的值。
類名*const指針變量名二對(duì)象地址
例:
Timetl(10,12,15)zt2;
Time*constpl=&tl;
在此后,程序中不能修改Pl。
例:P>&t2;//錯(cuò)誤語(yǔ)句;
0L
#3
8
百
78/145一
O指向?qū)ο蟮某V羔槪诔绦蜻\(yùn)行中始終指的是同一個(gè)對(duì)象。
即指針變量的值始終不變,但它所指對(duì)象的數(shù)據(jù)成員值可
以修改。當(dāng)需要將一個(gè)指針變量固定地與一個(gè)對(duì)象相聯(lián)系
時(shí),就可將指針變量指定為const。往往用常指針作為函數(shù)
的形參,目的是不允許在函數(shù)中修改指針變量的值,讓它
始終指向原來(lái)的對(duì)象。
79/145
364指向常對(duì)象的指針變量
格式:
const類型名*指針變量名;
例:constStudent*p;〃指向const對(duì)象。
指向?qū)ο?/p>
const非const指針變量
的指針變量
對(duì)象
mEconst_^6句指向&可修改
因?yàn)閏onst指針變量約束不可指向
比較嚴(yán)格,所以可以指
向任意類型對(duì)象。80/145—?可指向&不可修改所
指對(duì)象成員
ftinclude<iostream>
ttinclude<string>
usingnamespacestd;
classStudent
{public:
Student(intn,stringnam,chars)
{num=n;
name=nam;
sex-s;
cout<<^Constructorcalled.z/<<num<<endl;}
?Student()
{cout<<z/Destruetorcalled./z<<num<<endl;}
voidsetdata()
{cin>>num;}
voiddisplay()const;
private:
intnum;
voidStudent::display()const
stringname;{cout<<,,num:,,<<num<<endl;
charsex;cout<<,,name:z,<<name<<endl;
);cout〈〈〃sex:,/<<sex<<endl<<endl;
intmain()
{constStudenttl(1,〃yang〃,'f');
Studentt2(2,〃chao〃,'f');
constStudent*p;
Student*q;
p二&tl;〃指向const對(duì)象tl的指針變量。
p->display();
p=&t2;〃指向const對(duì)象的指針變量可以指向非const對(duì)象t2。
p->display();
//q=&tl;〃出錯(cuò),指向普通對(duì)象的指針變量不可以指向const對(duì)象。
//q->display();
q=&t2;〃指向普通對(duì)象的指針變量只可以指向普通對(duì)象。
q->display();
//p->setdata();通過(guò)指向const型的指針變量調(diào)用對(duì)象成員函數(shù),無(wú)法修
改成員。
//t2.setdata();〃但是通過(guò)對(duì)象調(diào)用成員函數(shù),則可以修改成員變量。
q->setdata();〃這個(gè)也是同樣道理。因?yàn)閝不是指向常量對(duì)象的指針,
所以,可以調(diào)用能夠修改成員變量的函數(shù)。
return0;
82/145
3.6.5對(duì)象的常引用
前面學(xué)過(guò)引用是傳遞參數(shù)的有效辦法。用引用形參時(shí),形
參變量與實(shí)參變量是同一個(gè)變量,在函數(shù)內(nèi)修改引用形參
也就是修改實(shí)參變量。
如果用引用形參又不想讓函數(shù)修改實(shí)參,可以使用常引用
機(jī)制。
格式:const類名&形參對(duì)象名
如:constStudent&stu
83/145
例3.8對(duì)象的引用
ttinclude<iostream>voidTime::gettime()
usingnamespacestd;(
classTimecout<<hour;
{public:cout<<minute;
Time(int,int,int);cout<<sec;
voidsettime();
voidgettime();
voidTime::settime()
private:(
inthour;cin>>hour;
intminute;cin>>minute;
intsec;cin>>sec;
);
Time::Time(inth,intm,ints)
{hour=h;
minute=m;
SeC=S;}84/145
voidfun(Time&t)//引用型形參,如果參數(shù)前面加
const,則不能修改所引用對(duì)象的成員數(shù)據(jù)。
{t.settime();
)
intmain()
{Timetl(10,13,56);
tl.gettime();
fun(tl);〃傳遞對(duì)象的地址
tl.gettime();
return0;
85/145
3.6.6const型數(shù)據(jù)的小結(jié)企
表3.3
形式含義
Timeconsttl;
tl是常對(duì)象,其值在任何情況下都不能改變
或constTimetl;
voidTime::fun()constfun是Time類中的常成員函數(shù),可以引用,但不能修改本類中的數(shù)據(jù)成員
Time*constp;P是指向Time對(duì)象的常指針,p的值(即p的指向)不能改變
constTime*p;P是指向Time類常對(duì)象的指針,其指向的類對(duì)象的值不能通過(guò)指針來(lái)改變
Time&tl=t;tl是Time類對(duì)象t的引用,t和tl指向同一段內(nèi)存空間
訣竅:從變量開始往左推導(dǎo),即可得知一個(gè)變量是什么類型的。星號(hào)左邊是
要指向的東西,右邊都是修飾指針變量的。如:
Time*constp;p左邊是const的,表示p不能變,再往左是星號(hào),說(shuō)明p
是一個(gè)指針,再往左是類名,表示指向那樣一個(gè)類的對(duì)象,成員可以修改。
Timeconst*p;p左邊是星號(hào),表示p是一個(gè)指針,指向的東西是const的,
不能變的,再往左是類名,表示指向那樣一個(gè)類的對(duì)象,其成員不能修改。
O0/T40
3.1構(gòu)造函數(shù)
3.2析構(gòu)函數(shù)
3.3調(diào)用構(gòu)造函數(shù)和析構(gòu)函數(shù)的順序
3.4對(duì)象數(shù)組
3.5對(duì)象指針
3.6共用數(shù)據(jù)的保護(hù)
3.7對(duì)象的動(dòng)態(tài)建立和釋放
3.8對(duì)象的賦值和復(fù)制
3.9靜態(tài)成員
3.10友元
2
3.n類模板/8?
£
8
f艮
87/145-一
3.7對(duì)象的動(dòng)態(tài)建立和釋放
0C++提供了new和delete運(yùn)算符,實(shí)現(xiàn)動(dòng)態(tài)分配、回收內(nèi)存。它們也可以
用來(lái)動(dòng)態(tài)建立對(duì)象和釋放對(duì)象。
1.動(dòng)態(tài)建立對(duì)象格式:new類名;
功能:在堆里分配內(nèi)存,建立指定類的一個(gè)無(wú)名對(duì)象。
如果分配成功,將返回動(dòng)態(tài)對(duì)象的起始地址(指針);
如不成功,返回0。為了保存這個(gè)指針,必須事先定義
類類型的指針變量。
格式:類名*指針變量名;
例:Box*pt;
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024至2030年大浮雕地板項(xiàng)目投資價(jià)值分析報(bào)告
- 2024年甲乙雙方關(guān)于計(jì)算機(jī)軟件開發(fā)與技術(shù)服務(wù)合同
- 2024年綠色生態(tài)度假區(qū)建設(shè)與開發(fā)合作合同版B版
- 智能城市服務(wù)系統(tǒng)開發(fā)合同
- 二零二五年信息安全幫工服務(wù)合同2篇
- 二零二五年度合同能源管理技術(shù)咨詢服務(wù)與節(jié)能技術(shù)研發(fā)合同3篇
- 媒體廣告發(fā)布及合作協(xié)議
- 2025年度石材荒料礦山開采與生態(tài)保護(hù)合同范本3篇
- 食品加工業(yè)智能化改造項(xiàng)目合同
- 2024年版商業(yè)地產(chǎn)租賃合作意向合同版B版
- 《組織與胚胎學(xué)》課程期末考試復(fù)習(xí)題庫(kù)及答案
- (八省聯(lián)考)河南省2025年高考綜合改革適應(yīng)性演練 化學(xué)試卷(含答案)
- 部編版三年級(jí)上冊(cè)道德與法治期末測(cè)試卷帶答案(鞏固)
- 教師個(gè)人工作業(yè)績(jī)總結(jié)范文
- 《中華人民共和國(guó)政府采購(gòu)法》專題培訓(xùn)
- 鄭州大學(xué)《高等代數(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 對(duì)銀行領(lǐng)導(dǎo)班子的評(píng)價(jià)意見和建議范文(3篇)
- 如何保護(hù)個(gè)人手機(jī)數(shù)據(jù)的安全
- 2024醫(yī)療設(shè)備維修與保養(yǎng)合同
- 第6課 戰(zhàn)國(guó)時(shí)期的社會(huì)變革(說(shuō)課稿)2024-2025學(xué)年七年級(jí)歷史上冊(cè)同步高效課堂(統(tǒng)編版2024)
- 汽車內(nèi)飾件及材料氣味評(píng)價(jià)標(biāo)準(zhǔn)解析
評(píng)論
0/150
提交評(píng)論