




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第八講靜態(tài)及const成員類、對象和內(nèi)存對象1對象2對象3數(shù)據(jù)1數(shù)據(jù)2數(shù)據(jù)1數(shù)據(jù)2數(shù)據(jù)1數(shù)據(jù)2函數(shù)1函數(shù)2靜態(tài)成員數(shù)據(jù)3函數(shù)3公共成員
classX{charch;staticints;
…...};intX::s=0;XA,B,C,D;XB;charch; XC; charch;XD;charch;XA; charch;staticints;靜態(tài)成員靜態(tài)類成員數(shù)據(jù)靜態(tài)數(shù)據(jù)成員的使用方法如下:1)靜態(tài)數(shù)據(jù)成員的定義與一般數(shù)據(jù)成員相似,但前面要加上static關(guān)鍵詞。2)靜態(tài)數(shù)據(jù)成員的初始化與一般數(shù)據(jù)成員不同,靜態(tài)數(shù)據(jù)成員初始化的格式如下:
<類型><類名>::<靜態(tài)數(shù)據(jù)成員>=<值>;3)在引用靜態(tài)數(shù)據(jù)成員時采用格式:
<類名>::<靜態(tài)數(shù)據(jù)成員><對象名>.<靜態(tài)數(shù)據(jù)成員>classA{…staticintvar;//在類的內(nèi)部聲明
…};intA::var=1;//在類的外部定義靜態(tài)類成員數(shù)據(jù)靜態(tài)和自動成員變量對象1對象2對象3automatic數(shù)據(jù)數(shù)據(jù)2數(shù)據(jù)1數(shù)據(jù)2數(shù)據(jù)1數(shù)據(jù)2靜態(tài)數(shù)據(jù)數(shù)據(jù)4automatic數(shù)據(jù)數(shù)據(jù)1automatic數(shù)據(jù)數(shù)據(jù)3intsecond;調(diào)用靜態(tài)成員函數(shù)的格式如下:靜態(tài)成員函數(shù)不與某個具體的對象相聯(lián)系,它是屬于類的。staticints;如果一個成員函數(shù)只存取一個類的靜態(tài)數(shù)據(jù)成員,可將該成員函數(shù)說明為靜態(tài)成員函數(shù).Time::Time(inth=0,intm=0,ints=0)用const聲明的成員變量為常量成員變量~Counter(){num--;}return0;Time::Time(inth=0,intm=0,ints=0)Datedd(d1),automatic數(shù)據(jù)第八講靜態(tài)及const成員floatscore;gammag2,g3;Counterb;b.//例靜態(tài)數(shù)據(jù)成員的說明和初始化
#include<iostream.h>classCounter{staticintnum;public:voidsetnum(inti){num=i;} voidshownum(){cout<<num<<'\t';}};intCounter::num=0;//公有、私有均需要初始化否則連接錯誤voidmain(){Countera,b;a.shownum();b.shownum();a.num=10;//Counter::num=10;cout<<Counter::num<<endl;}聲明私有靜態(tài)數(shù)據(jù)成員成員函數(shù)訪問
靜態(tài)數(shù)據(jù)成員調(diào)用成員函數(shù)訪問
私有靜態(tài)數(shù)據(jù)成員訪問同一個
靜態(tài)數(shù)據(jù)成員a.setnum(10);a.shownum();b.shownum();//例使用公有靜態(tài)數(shù)據(jù)成員
#include<iostream.h>classcounter{public:voidsetnum(inti){num=i;}voidshownum(){cout<<num<<'\t';}
staticintnum;};intcounter::num=1; //初始值為1voidmain(){inti;for(i=0;i<5;i++){counter::num+=i;cout<<counter::num<<'\t';}cout<<endl;}訪問公有靜態(tài)數(shù)據(jù)成員
靜態(tài)數(shù)據(jù)成員vs
全局變量
有了靜態(tài)數(shù)據(jù)成員,各對象之間的數(shù)據(jù)有了溝通的渠道,實現(xiàn)數(shù)據(jù)共享。全局變量破壞了封裝的原則,不符合面向?qū)ο蟪绦虻囊?。公用靜態(tài)數(shù)據(jù)成員與全局變量的作用域不同靜態(tài)數(shù)據(jù)成員的作用域只限于定義該類的作用域內(nèi)
靜態(tài)類成員數(shù)據(jù)
靜態(tài)成員函數(shù)的定義是在一般函數(shù)定義前加上static關(guān)鍵字。靜態(tài)成員函數(shù)不與某個具體的對象相聯(lián)系,它是屬于類的。調(diào)用靜態(tài)成員函數(shù)的格式如下:
<類名>::<靜態(tài)成員函數(shù)名>(<參數(shù)表>);或
<對象名>.<靜態(tài)成員函數(shù)名>(<參數(shù)表>);靜態(tài)成員函數(shù)代碼模擬-統(tǒng)計對象的數(shù)目#include<iostream.h>classCounter{staticintnum;public:
Counter(
){num++;}
~Counter(){num--;}voidsetnum(inti){num=i;} voidshownum(){cout<<num<<'\t';}
staticintget(){returnnum;}};intCounter::num=0; voidmain(){ Countera;a.shownum(); Counterb;b.shownum();
cout<<Counter::get()<<endl;}調(diào)用公有靜態(tài)成員函數(shù)靜態(tài)成員函數(shù)靜態(tài)成員函數(shù)只能訪問靜態(tài)數(shù)據(jù)成員、靜態(tài)成員函數(shù)和類以外的函數(shù)和數(shù)據(jù),不能訪問類中的非靜態(tài)數(shù)據(jù)成員(因為非靜態(tài)數(shù)據(jù)成員只有對象存在時才有意義)。但靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù)可由任意訪問權(quán)限許可的函數(shù)訪問。和一般成員函數(shù)類似,靜態(tài)成員函數(shù)也有訪問限制,私有靜態(tài)成員函數(shù)不能由外界訪問。靜態(tài)成員函數(shù)沒有this指針,因此,靜態(tài)成員函數(shù)只能直接訪問類中的靜態(tài)成員,若要訪問類中的非靜態(tài)成員時,必須借助對象名或指向?qū)ο蟮闹羔槨?/p>
#include<iostream.h>classStudent{public:Student(intn,inta,floats):num(n),score(s){}voidtotal(){sum+=score;count++;}
staticfloataverage();//聲明靜態(tài)成員函數(shù)private:intnum;floatscore;
staticfloatsum;//靜態(tài)數(shù)據(jù)成員
staticintcount;//靜態(tài)數(shù)據(jù)成員};floatStudent::average()//定義靜態(tài)成員函數(shù){ return(sum/count);}代碼模擬floatStudent::sum=0;//對靜態(tài)數(shù)據(jù)成員初始化intStudent::count=0;//對靜態(tài)數(shù)據(jù)成員初始化intmain(){ Studentstud[3]={Student(1001,18,70), Student(1002,19,78), Student(1005,20,98)}; for(inti=0;i<3;i++) stud[i].total(); cout<<"theaveragescoreofis" <<Student::average()<<endl; return0;}const與類const對象const成員變量const成員函數(shù)const與類1.const成員變量用const聲明的成員變量為常量成員變量const成員變量只能由構(gòu)造函數(shù)通過初始化列表對該數(shù)據(jù)成員進(jìn)行初始化。
classTime{
public:
Time(inth=0,intm=0,ints=0);
voidsetTime(int,int,int);
intsetHour(int);
intgetHour();
intgetMinute();
voidprint();
private:
const
inthour;
//0-23
intminute;
//0-59
intsecond;
//0-59
};
const與類TimewakeUp(6,45,0);
wakeUp.setHour(20);
wakeUp.getHour();
wakeUp.print();
Time::
Time(inth=0,intm=0,ints=0):hour(h),minute(m),second(s){}Time::
Time(inth=0,intm=0,ints=0){hour=h;minute=m;second=s;}Time::
Time(inth=0,intm=0,ints=0):hour(h){minute=m;second=s;}const與類2.const成員函數(shù)使用const關(guān)鍵詞說明的函數(shù)稱為常量成員函數(shù),說明格式如下:
<類型><函數(shù)名>(<參數(shù)表>)const;const成員函數(shù)的定義格式如下:<類型><函數(shù)名>(<參數(shù)表>)const{…...}若成員函數(shù)不修改對象,則聲明為const.
const成員函數(shù)對于const成員函數(shù)需要注意以下幾點(diǎn):
1)const是函數(shù)類型的一個組成部分,因此在實現(xiàn)部分也要帶const關(guān)鍵詞。
2)常成員函數(shù)不更新對象的數(shù)據(jù)成員,也不能調(diào)用該類中非常成員函數(shù)。
3)const關(guān)鍵詞可以參與區(qū)分重載函數(shù)。如果在類中有說明:
voidprint();
voidprint()const;
則這是對print的有效重載。const成員函數(shù)const與類3.const對象用const聲明的對象稱為常量對象。
const對象只能調(diào)用它的const成員函數(shù),而不能調(diào)用其他成員函數(shù)。
constDated1;Date::Date(constDate&d);Datedd(d1),Student(1005,20,98)};shownum();b.Counter(){num++;}{hour=h;minute=m;second=s;}C.const數(shù)據(jù)成員只能由構(gòu)造函數(shù)通過初始化列表對其進(jìn)行初始化;charch;voidprint();和一般成員函數(shù)類似,靜態(tài)成員函數(shù)也有訪問限制,私有靜態(tài)成員函數(shù)不能由外界訪問。調(diào)用靜態(tài)成員函數(shù)的格式如下:Date::Date(constDate&d);XA,B,C,D;voidg(){cout<<"asdf"<<endl;}XA,B,C,D;代碼模擬-constclassTime{public: Time(inth=0,intm=0,ints=0) {hour=h;minute=m;second=s;} voidsetTime(inth,intm,ints) {hour=h;minute=m;second=s;}private: inthour; intminute; intsecond;};main(){ constTimet(20,20,20);
t.setTime(30,39,39); //error}#include<iostream.h>classA{public: A(intaa=0,intbb=0):a(aa),b(bb){} voidf()const{cout<<"1234"<<endl;}; voidg(){cout<<"asdf"<<endl;}private: inta; intb;};main(){ constAt; t.f(); //t.g(); error}代碼練習(xí)根據(jù)要求,寫出類main(){gammag1;gamma::showtotal();gammag2,g3;gamma::showtotal();g1.showid();g2.showid();g3.showid();cout<<"----------endofprogram----------\n";return0;}課后練習(xí)
生成一個SavingAccount類,用static數(shù)據(jù)成員包含每個存款人的annualInterestRate(年利率)。類的每個成員包含一個private數(shù)據(jù)成員savingsBalance,表示當(dāng)前存款額。提供一個calculateMonthlyInterest成員函數(shù),計算月利息,用banlance乘以annualInerestRate除以12取得,并將這個月息加進(jìn)savingBalance中,提供一個static成員函數(shù)modifyInterestRate,將staticannualInterestRate設(shè)為新值。實例化兩個不同的對象saver1和saver2,結(jié)余分別為和3000.0.將annualInterestRate設(shè)置為3%,計算每個存款人的月息并打印新的結(jié)果,然后將annualInterestRate設(shè)置為4%,再次打印。課后練習(xí)
設(shè)計一個集合類,包括將集合置空,添加元素,判斷元素是否在集合中,輸出集合,以及將集合中元素逆置,另外還有一個拷貝構(gòu)造函數(shù),并使用一些數(shù)據(jù)進(jìn)行測試。{ constAt;用const聲明的成員變量為常量成員變量Date::Date(constDate&d);shownum();b.XA,B,C,D;cout<<counter::num<<'\t';Counter(){num++;}voidsetnum(in
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030中國木質(zhì)素行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 2025-2030中國木制家具行業(yè)市場深度分析及發(fā)展預(yù)測與投資策略研究報告
- 2025-2030中國有源壓電蜂鳴器行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 2025-2030中國有機(jī)牛肉行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 學(xué)校體育場館多功能區(qū)劃分及設(shè)施配置
- 2025-2030中國智能郵箱行業(yè)發(fā)展現(xiàn)狀及未來趨勢報告
- 2025-2030中國智能烘干架行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 2025-2030中國智能手表行業(yè)市場發(fā)展分析及投資前景預(yù)測研究報告
- 2025-2030中國智能小便器行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 2025-2030中國智能互聯(lián)洗衣機(jī)行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 數(shù)科OFD版式軟件系列產(chǎn)品白皮書整體
- GB/T 44328-2024七氟異丁腈
- 保安員資格測試題庫300題(含標(biāo)準(zhǔn)答案)
- (完整版)智力七巧板整冊教案
- 微流控器官芯片的醫(yī)療應(yīng)用
- 《3.2動能定理的應(yīng)用》 教學(xué)課件
- 春季中醫(yī)養(yǎng)生課件
- 《校園環(huán)保倡議共建綠色校園》主題班會
- 4 同學(xué)相伴 第二課時 不讓一個人落下 教學(xué)設(shè)計-2023-2024學(xué)年道德與法治三年級下冊統(tǒng)編版
- 2024年民航安全檢查員(三級)資格理論考試題庫大全-中(多選題部分)
- 12《植物的葉》(教案)三年級下冊科學(xué)粵教版
評論
0/150
提交評論