第八學時-類與對象優(yōu)秀文檔_第1頁
第八學時-類與對象優(yōu)秀文檔_第2頁
第八學時-類與對象優(yōu)秀文檔_第3頁
第八學時-類與對象優(yōu)秀文檔_第4頁
第八學時-類與對象優(yōu)秀文檔_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第八講靜態(tài)及const成員類、對象和內存對象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關鍵詞。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;//在類的內部聲明

…};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;調用靜態(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ù)成員調用成員函數(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ù)共享。全局變量破壞了封裝的原則,不符合面向對象程序的要求。公用靜態(tài)數(shù)據(jù)成員與全局變量的作用域不同靜態(tài)數(shù)據(jù)成員的作用域只限于定義該類的作用域內

靜態(tài)類成員數(shù)據(jù)

靜態(tài)成員函數(shù)的定義是在一般函數(shù)定義前加上static關鍵字。靜態(tài)成員函數(shù)不與某個具體的對象相聯(lián)系,它是屬于類的。調用靜態(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;}調用公有靜態(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ù)可由任意訪問權限許可的函數(shù)訪問。和一般成員函數(shù)類似,靜態(tài)成員函數(shù)也有訪問限制,私有靜態(tài)成員函數(shù)不能由外界訪問。靜態(tài)成員函數(shù)沒有this指針,因此,靜態(tài)成員函數(shù)只能直接訪問類中的靜態(tài)成員,若要訪問類中的非靜態(tài)成員時,必須借助對象名或指向對象的指針。

#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成員變量只能由構造函數(shù)通過初始化列表對該數(shù)據(jù)成員進行初始化。

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關鍵詞說明的函數(shù)稱為常量成員函數(shù),說明格式如下:

<類型><函數(shù)名>(<參數(shù)表>)const;const成員函數(shù)的定義格式如下:<類型><函數(shù)名>(<參數(shù)表>)const{…...}若成員函數(shù)不修改對象,則聲明為const.

const成員函數(shù)對于const成員函數(shù)需要注意以下幾點:

1)const是函數(shù)類型的一個組成部分,因此在實現(xiàn)部分也要帶const關鍵詞。

2)常成員函數(shù)不更新對象的數(shù)據(jù)成員,也不能調用該類中非常成員函數(shù)。

3)const關鍵詞可以參與區(qū)分重載函數(shù)。如果在類中有說明:

voidprint();

voidprint()const;

則這是對print的有效重載。const成員函數(shù)const與類3.const對象用const聲明的對象稱為常量對象。

const對象只能調用它的const成員函數(shù),而不能調用其他成員函數(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ù)成員只能由構造函數(shù)通過初始化列表對其進行初始化;charch;voidprint();和一般成員函數(shù)類似,靜態(tài)成員函數(shù)也有訪問限制,私有靜態(tài)成員函數(shù)不能由外界訪問。調用靜態(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}代碼練習根據(jù)要求,寫出類main(){gammag1;gamma::showtotal();gammag2,g3;gamma::showtotal();g1.showid();g2.showid();g3.showid();cout<<"----------endofprogram----------\n";return0;}課后練習

生成一個SavingAccount類,用static數(shù)據(jù)成員包含每個存款人的annualInterestRate(年利率)。類的每個成員包含一個private數(shù)據(jù)成員savingsBalance,表示當前存款額。提供一個calculateMonthlyInterest成員函數(shù),計算月利息,用banlance乘以annualInerestRate除以12取得,并將這個月息加進savingBalance中,提供一個static成員函數(shù)modifyInterestRate,將staticannualInterestRate設為新值。實例化兩個不同的對象saver1和saver2,結余分別為和3000.0.將annualInterestRate設置為3%,計算每個存款人的月息并打印新的結果,然后將annualInterestRate設置為4%,再次打印。課后練習

設計一個集合類,包括將集合置空,添加元素,判斷元素是否在集合中,輸出集合,以及將集合中元素逆置,另外還有一個拷貝構造函數(shù),并使用一些數(shù)據(jù)進行測試。{ 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)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論