版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
面向?qū)ο蟮诮M第一頁,共四十五頁,2022年,8月28日我們按照C++通常的做法,是將程序組成獨立的文件。一個源程序一般至少分為三個源文件:類聲明文件(.h文件)類實現(xiàn)文件(.cpp文件)類的使用文件(main()所在的.cpp文件)最后利用工程來組合各個文件。先瀏覽下上節(jié)課時鐘的例子第二頁,共四十五頁,2022年,8月28日例子
clock1.h類聲明文件#include<iostream.h>classClock //時鐘類聲明{public: //外部接口
Clock();//默認構(gòu)造函數(shù)Clock(intNewH,intNewM,intNewS);//自定義構(gòu)造函數(shù)voidShowTime(); ~Clock(){}private: //私有數(shù)據(jù)成員
intHour,Minute,Second;};};
第三頁,共四十五頁,2022年,8月28日類實現(xiàn)文件clock1.cpp#include”clock1.h”Clock::Clock()
//構(gòu)造函數(shù){ Hour=0; Minute=0; Second=0;}Clock::Clock(intNewH,intNewM,intNewS){ Hour=NewH; Minute=NewM; Second=NewS;}voidClock::ShowTime(){ cout<<Hour<<":"<<Minute<<":"<<Second<<endl;}第四頁,共四十五頁,2022年,8月28日
類使用文件useclock1.cpp#include“clock1.h”voidmain() //主函數(shù){constintst=4; Clockmyclock[st]={Clock(1,2,3),Clock(),Clock(4,5,6),};//對象數(shù)組for(inti=0;i<st;i++)myclock[i].ShowTime();}第五頁,共四十五頁,2022年,8月28日運行結(jié)果:1:2:3
0:0:04:5:60:0:0第六頁,共四十五頁,2022年,8月28日對象數(shù)組聲明:類名數(shù)組名[元素個數(shù)];訪問方法:通過下標訪問數(shù)組名[下標].成員名第七頁,共四十五頁,2022年,8月28日
對象數(shù)組初始化數(shù)組中每一個元素對象被創(chuàng)建時,系統(tǒng)都會調(diào)用類構(gòu)造函數(shù)初始化該對象。通過初始化列表賦值。例:constintst=4; clockmyclock[st]={clock(1,2,3),clock(),clock(4,5,6),};如果沒有為數(shù)組元素指定顯式初始值,數(shù)組元素便使用缺省值初始化(調(diào)用缺省構(gòu)造函數(shù))。第八頁,共四十五頁,2022年,8月28日剛才定義的時鐘類中下面幾種聲明是否可行Clockfirst(1,2,3);
Clockfirst;Clockfirst=Clock();Clockfirst();第九頁,共四十五頁,2022年,8月28日C++提供了兩種使用構(gòu)造函數(shù)來初始化對象的方式。第一種是顯式的調(diào)用構(gòu)造函數(shù):Classfirst=Class(1,2,3);
另一種方法是隱式調(diào)用構(gòu)造函數(shù):
Classfirst(1,2,3);
它與下面的顯式調(diào)用等價:
Classfirst=Class(1,2,3);隱式調(diào)用默認構(gòu)造函數(shù),不需要使用圓括號。否則,Classfirst()將返回一個Class對象的函數(shù)。第十頁,共四十五頁,2022年,8月28日靜態(tài)成員靜態(tài)數(shù)據(jù)成員用關(guān)鍵字static聲明該類的所有對象維護該成員的同一個拷貝一般在類外定義和初始化,用(::)來指明所屬的類。static數(shù)據(jù)成員也必須遵守public/private/protected訪問規(guī)則靜態(tài)成員第十一頁,共四十五頁,2022年,8月28日具有靜態(tài)數(shù)據(jù)成員的Point類#include<iostream.h>classPoint {public: Point(intxx=0,intyy=0){X=xx;Y=yy;countP++;}Point(Point&p); intGetX(){returnX;} intGetY(){returnY;}
staticvoidGetC(){cout<<"Objectid="<<countP<<endl;}private: intX,Y;
staticintcountP;};
靜態(tài)成員第十二頁,共四十五頁,2022年,8月28日Point::Point(Point&p){ X=p.X; Y=p.Y; countP++;}intPoint::countP=0;
voidmain() //主函數(shù)實現(xiàn){ PointA(4,5); //聲明對象A cout<<"PointA,"<<A.GetX()<<","<<A.GetY(); A.GetC(); //輸出對象號,對象名引用
PointB(A); //聲明對象B cout<<"PointB,"<<B.GetX()<<","<<B.GetY(); B.GetC();Point::GetC(); //輸出對象號,類名引用}第十三頁,共四十五頁,2022年,8月28日靜態(tài)成員函數(shù)類外代碼可以使用類名和作用域操作符來調(diào)用靜態(tài)成員函數(shù)。靜態(tài)成員函數(shù)只能引用屬于該類的靜態(tài)數(shù)據(jù)成員或靜態(tài)成員函數(shù)。如果靜態(tài)成員函數(shù)需要訪問非靜態(tài)成員,需要通過對象進行調(diào)用。靜態(tài)成員函數(shù)甚至不能使用this指針。第十四頁,共四十五頁,2022年,8月28日#include<iostream.h>classA{public:staticvoidf(Aa);private:intx;};voidA::f(Aa){a.x=0;cout<<x;//對x的引用是錯誤的
cout<<a.x;//正確}voidmain(){Ab;b.f(b);}第十五頁,共四十五頁,2022年,8月28日友元類的重要特點之一是實現(xiàn)了數(shù)據(jù)隱藏。類的定義中一般將數(shù)據(jù)成員聲明為私有成員,在類的外部不能直接訪問私有成員,只能通過類的公有成員函數(shù)進行訪問。若需要在類的外部直接訪問私有數(shù)據(jù)成員,則需要用到友元來實現(xiàn)這一功能。友元第十六頁,共四十五頁,2022年,8月28日創(chuàng)建友元創(chuàng)建友元函數(shù)的第一步是將其原型放在聲明中,并在原型聲明前加上關(guān)鍵字friend:friendfloatDistance(Point&a,Point&b);
該原型意味著下面兩點:友元第十七頁,共四十五頁,2022年,8月28日雖然Distance()函數(shù)是在類聲明中聲明的,但它不是成員函數(shù),因此不能使用成員操作符來調(diào)用。雖然Distance()函數(shù)不是成員函數(shù),但它與成員函數(shù)的訪問權(quán)限相同。第二步是編寫函數(shù)定義。因為它不是成員函數(shù),所以不要使用Point::限定符。第十八頁,共四十五頁,2022年,8月28日使用友元函數(shù)計算兩點距離#include<iostream.h>#include<math.h>classPoint //Point類聲明{public: //外部接口
Point(intxx=0,intyy=0){X=xx;Y=yy;} intGetX(){returnX;} intGetY(){returnY;}
friendfloatDistance(Point&a,Point&b);
private: //私有數(shù)據(jù)成員
intX,Y;};友元第十九頁,共四十五頁,2022年,8月28日doubleDistance(Point&a,Point&b){doubledx=a.X-b.X;doubledy=a.Y-b.Y;returnsqrt(dx*dx+dy*dy);}intmain(){Pointp1(3.0,5.0),p2(4.0,6.0);doubled=Distance(p1,p2);cout<<"Thedistanceis"<<d<<endl;return0;}第二十頁,共四十五頁,2022年,8月28日友元類若一個類為另一個類的友元,則此類的所有成員都能訪問對方類的私有成員。聲明語法:將友元類名在另一個類中使用friend修飾說明。友元第二十一頁,共四十五頁,2022年,8月28日友元類舉例classA{friendclassB;public:voidDisplay()
{cout<<x<<endl;}private:intx;}classB{public:voidSet(inti);voidDisplay();private:Aa;};友元第二十二頁,共四十五頁,2022年,8月28日voidB::Set(inti){a.x=i;}voidB::Display(){a.Display();}第二十三頁,共四十五頁,2022年,8月28日類作用域類作用域是指在類的聲明中用一對花括號括起來的部分。在類中,類的任何成員都可以訪問該類的所有成員。對于成員函數(shù),即使函數(shù)的實現(xiàn)在花括號的類外,由于函數(shù)原型已在類中聲明,因此也在類的作用域范圍之內(nèi)。第二十四頁,共四十五頁,2022年,8月28日一個類的成員函數(shù)可以不受限制的訪問本類的數(shù)據(jù)成員,而在該類作用域之外,不能直接訪問類的數(shù)據(jù)成員和成員函數(shù),即使是公有數(shù)據(jù)成員,也只能通過本類對象才可以訪問。第二十五頁,共四十五頁,2022年,8月28日對象的生存期對象從產(chǎn)生到結(jié)束的這段時間就是它的生存期。在對象生存期內(nèi),對象將保持它的值,直到被更新為止。第二十六頁,共四十五頁,2022年,8月28日
對象的生存期一般可以分以下三種情況:局部對象。局部對象是被定義在一個程序塊或函數(shù)體內(nèi)的對象,對象被定義時系統(tǒng)自動調(diào)用構(gòu)造函數(shù),該對象被創(chuàng)建,當程序運行結(jié)束時該對象被釋放。對象的生存期第二十七頁,共四十五頁,2022年,8月28日
靜態(tài)對象。靜態(tài)對象被定義在一個文件中,它的作用域從定義開始到文件結(jié)束時止。程序第一次執(zhí)行靜態(tài)對象定義語句時,自動調(diào)用構(gòu)造函數(shù)創(chuàng)建對象,程序運行結(jié)束時調(diào)用析構(gòu)函數(shù)釋放對象。
對象的生成期第二十八頁,共四十五頁,2022年,8月28日全局對象。全局對象的作用域在整個程序中,它的作用域范圍最大,生存期也最長。對象的生存期第二十九頁,共四十五頁,2022年,8月28日類作用域及生存期舉例#include<iostream.h>classTest{public:Test(inta){i=a;cout<<"Test:"<<i<<endl;}friendvoidfun1(intn);private:inti;};第三十頁,共四十五頁,2022年,8月28日voidfun1(intn){staticTestt1(n);//靜態(tài)對象t1cout<<"fun1"<<n<<endl;}voidmain(){Testt2(188);fun1(18);fun1(28);}第三十一頁,共四十五頁,2022年,8月28日名空間名空間是C++為解決變量、函數(shù)名和類名等標識符的命名沖突服務(wù)的,它的基本方法是將變量等標識符定義在一個不同名的名空間中。第三十二頁,共四十五頁,2022年,8月28日名空間說明格式如下:namespace名空間標識符名{
成員的聲明;}其中名空間標識符在所定義的域中必須是惟一的,名空間內(nèi)的成員既包括變量,也包括函數(shù)。第三十三頁,共四十五頁,2022年,8月28日名空間成員的訪問格式如下:名空間標識符名::成員名usingnamespacestd;該語句的含義是使用名空間std。使用名空間可以幫助開發(fā)人員在開發(fā)新的軟件組件時不會和已有的軟件組件產(chǎn)生標識符命名沖突。第三十四頁,共四十五頁,2022年,8月28日c++語言提供一個全局的命名空間namespace,可以避免導(dǎo)致全局命名沖突問題。請注意以下兩個頭文件://one.h
charfunc(char);
classString{...};//somelib.h
classString{...};如果按照上述方式定義,那么這兩個頭文件不可能包含在同一個程序中,因為String類會發(fā)生沖突。
第三十五頁,共四十五頁,2022年,8月28日所謂命名空間,是一種將程序庫名稱封裝起來的方法,它就像在各個程序庫中立起一道道圍墻。比如:
//one.h
namespaceone
{
charfunc(char);
classString{...};
}//somelib.h
namespaceSomeLib
{
classString{...};
}現(xiàn)在就算在同一個程序中使用String類也不會發(fā)生沖突了,因為他們分別變成了:one::String()以及Somelib::String()這樣,就可以通過聲明命名空間來區(qū)分不同的類或函數(shù)等了第三十六頁,共四十五頁,2022年,8月28日常類型常類型是指使用關(guān)鍵字const說明的類型,常類型的變量或?qū)ο蟪蓡T的值在程序運行期間是不可改變的。第三十七頁,共四十五頁,2022年,8月28日常引用常引用所引用的對象不能被更新。如果常引用作為形參,則不會發(fā)生對實參的不希望的更改。常引用說明格式如下:const類型說明符&引用名;例如:intn=18;constint&b=n;b是一個常引用量,它所應(yīng)用的對象不允許更改。如果出現(xiàn):b=129;則是非法,編譯時將產(chǎn)生錯誤。第三十八頁,共四十五頁,2022年,8月28日常對象如果在說明對象時用const限定,則被說明的對象為常對象。被說明為常對象的數(shù)據(jù)成員的值在整個生存周期內(nèi)不能被修改,常對象只能調(diào)用常成員函數(shù)。常對象說明格式如下:類名const對象名;或const類名對象名;第三十九頁,共四十五頁,2022年,8月28日
常成員函數(shù)使用const關(guān)鍵字進行說明的成員函數(shù),稱為常成員函數(shù)。常對象說明格式如下:
類型函數(shù)名(參數(shù)表)const;
其中,const是加在函數(shù)說明后面的類型修飾符,它是函數(shù)類型的一個組成部分,因此,在函數(shù)實現(xiàn)部分也要帶const關(guān)鍵字。第四十頁,共四十五頁,2022年,8月28日
#include<iostream.h>classR
{public:
R(intr1,intr2){R1=r1;R2=r2;}
voidprint();voidprint()const;//常成員函數(shù)private:
intR1,R2;
};
voidR::print()
{
cout<<r1<<","<<r2<<endl;
}
voidR::print()const
{
cout<<r1<<";"<<r2<<endl;
}
voidmain()
{
Ra(5,4);
a.print();
constRb(20,52);
b.print();
}
第四十一頁,共四十五頁,2022年,8月28日該例子的輸出結(jié)果為:
5,4
20,52
該程序的類聲明了兩個成員函數(shù),其類型是不同的(其實就是重載成員函數(shù))。有帶const修飾符的成員函數(shù)處理const常量,這也體現(xiàn)出函數(shù)重載的特點。第四十二頁,共四十五頁,2022年,8月28日
常數(shù)據(jù)成員類型修飾符const不僅可以說明成員函數(shù),也可以說明數(shù)據(jù)成員。
由于const類型對象必
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度彩鋼棚鋼結(jié)構(gòu)材料質(zhì)量檢測合同3篇
- 2025年度年度財務(wù)報表編制保密合作協(xié)議3篇
- 年度非開挖導(dǎo)向鉆機鋪管機市場分析及競爭策略分析報告
- 二零二五年恒大地產(chǎn)商業(yè)地產(chǎn)租賃及產(chǎn)權(quán)變更代理合同樣本3篇
- 2025廠長任期企業(yè)可持續(xù)發(fā)展戰(zhàn)略合同3篇
- 二零二五版創(chuàng)業(yè)園區(qū)租賃合同參考模板(含孵化服務(wù))3篇
- 2025年度瓷磚批發(fā)市場入駐經(jīng)營合同4篇
- 2025年蔬菜運輸合同含蔬菜品牌推廣效果評估條款2篇
- 2025年度豪華品牌4S店新車銷售與服務(wù)保障合同3篇
- 2025年LED廣告屏租賃與品牌推廣服務(wù)合同模板3篇
- GB/T 37238-2018篡改(污損)文件鑒定技術(shù)規(guī)范
- 普通高中地理課程標準簡介(湘教版)
- 河道治理工程監(jiān)理通知單、回復(fù)單范本
- 超分子化學(xué)簡介課件
- 高二下學(xué)期英語閱讀提升練習(xí)(一)
- 易制爆化學(xué)品合法用途說明
- 【PPT】壓力性損傷預(yù)防敷料選擇和剪裁技巧
- 大氣喜慶迎新元旦晚會PPT背景
- DB13(J)∕T 242-2019 鋼絲網(wǎng)架復(fù)合保溫板應(yīng)用技術(shù)規(guī)程
- 心電圖中的pan-tompkins算法介紹
- 羊絨性能對織物起球的影響
評論
0/150
提交評論