




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C++程序設(shè)計(jì)類與對(duì)象面向?qū)ο蟪绦蛟O(shè)計(jì)概述
面向?qū)ο蟮某绦蛟O(shè)計(jì)方法,簡(jiǎn)稱為OOP,其根本要求是將描述某一類事物的數(shù)據(jù)與處理這些數(shù)據(jù)的函數(shù)都封裝成一個(gè)整體,從而到達(dá)數(shù)據(jù)隱藏〔保護(hù)〕的目的。應(yīng)用程序只有通過這一整體中的函數(shù)才能修改這一整體中的數(shù)據(jù),同樣,數(shù)據(jù)結(jié)構(gòu)的變化,僅影響封裝在一起的函數(shù)。這種將數(shù)據(jù)與處理這些數(shù)據(jù)的函數(shù)封裝成一個(gè)整體,就構(gòu)成一個(gè)類。類的封裝性是指:使類中的數(shù)據(jù)在類的外部是不可見的,外部只能通過公共接口〔類中的函數(shù)〕與類中數(shù)據(jù)發(fā)生聯(lián)系。類的派生性是指:一個(gè)類可以派生出它的子類,子類可以從它的父類中局部或全部地繼承各種函數(shù)和數(shù)據(jù),并增加新的函數(shù)和數(shù)據(jù)。對(duì)象是類的一個(gè)實(shí)例,類是用戶定義的一種類型,具有為類類型的變量稱為對(duì)象,也稱為實(shí)例。對(duì)象是動(dòng)態(tài)產(chǎn)生和動(dòng)態(tài)消亡的。一個(gè)對(duì)象占用計(jì)算機(jī)內(nèi)存中的一個(gè)獨(dú)立區(qū)域,用于存放對(duì)象的數(shù)據(jù)和函數(shù),這個(gè)區(qū)域相對(duì)獨(dú)立,只有局部于對(duì)象中的函數(shù)才可以訪問存放在該對(duì)象中的數(shù)據(jù)。
類是對(duì)某一事物的抽象描述,它既可包含描述事物的數(shù)據(jù),又可包含處理這些數(shù)據(jù)的函數(shù)。在C++中,我們可以通過類的定義,把描述矩形的結(jié)構(gòu)和處理這個(gè)矩形的函數(shù)組合到一個(gè)完整的類定義中:classCRectangle{ intleft; inttop; intright; intbottom; voidDrawRectangle(void);};left,top,right,bottom稱為成員變量,而函數(shù)稱為類的成員函數(shù)。由此可見,類中不僅包含了描述構(gòu)造類型的成員變量,而且可以包含用于處理這些成員變量的操作。4.4.1類的定義C++中完整的類定義形式如下:class類名{ private:
私有類成員;
public:
公有類成員;
protected:
保護(hù)類成員;};private:限定為類的私有成員,只允許該類中的成員函數(shù)存取私有的成員數(shù)據(jù),對(duì)于私有的成員函數(shù),只能被該類中的成員函數(shù)調(diào)用;public:限定為類的公有成員,它不僅允許該類中的成員函數(shù)調(diào)用公有成員數(shù)據(jù),而且允許該類之外的函數(shù)也調(diào)用公有成員數(shù)據(jù),公有成員函數(shù)不僅能被該類的成員函數(shù)調(diào)用,而且能被其他函數(shù)調(diào)用。protected:限定為類的保護(hù)成員,允許該類及其派生類的成員函數(shù)調(diào)用成員數(shù)據(jù)或成員函數(shù)。但其他函數(shù)不能存取該類的保護(hù)成員數(shù)據(jù),也不能調(diào)用該類的保護(hù)成員函數(shù)。例4.1定義描述一個(gè)人的類。classperson{ private: charname[12]; intage; charsex[4]; public: voidRegisterPerson(char*,int,char*); voidGetName(char*); intGetAge(void); voidGetSex(char*);};在類person中,把成員數(shù)據(jù)name、age、sex定義為私有成員;四個(gè)函數(shù)定義為公有成員:RegisterPerson():用來登錄一個(gè)人的姓名、性別和年齡;GetName():用來獲取一個(gè)人的姓名;GetAge()和GetSex()獲取人的年齡和性別。
在類體定義中,當(dāng)省略關(guān)鍵字private時(shí),系統(tǒng)默認(rèn)為所定義的成員數(shù)據(jù)為私有成員,所以類person還可以有另外的等同寫法。在以上的類定義中,person類中的成員函數(shù)僅給出了函數(shù)原型,并沒有給出成員函數(shù)的定義,在使用這些成員函數(shù)前,必須先給出函數(shù)的定義。在C++中定義成員函數(shù)的一般格式為:函數(shù)類型類名::函數(shù)名〔參數(shù)表〕{……..}其中,運(yùn)算符“::”稱為作用域分辨符,它指出“函數(shù)名”是屬于“類名”的成員函數(shù)。voidPerson::RegisterPerson(char*newname,intnewage,char*newsex){ strcpy(name,newname); age=newage; strcpy(sex,newsex);}VoidPerson::GetName(char*newname){ strcpy(name,newname); }IntPerson::GetAge(void){ return(age); }VoidPerson::GetSex(char*newsex){ strcpy(sex,newsex); }例4.2定義類person的四個(gè)成員函數(shù)類具有封裝性,并且類只是定義了一種結(jié)構(gòu)-模板,所以類中的任何成員數(shù)據(jù)均不能使用關(guān)鍵字extern、auto、register限定其存儲(chǔ)類型。成員函數(shù)可以直接使用類中的任一成員,包括數(shù)據(jù)成員和函數(shù)成員。在定義類時(shí),只是定義了一種導(dǎo)出的數(shù)據(jù)類型,并不為類分配存儲(chǔ)空間,所以在定義類中的數(shù)據(jù)成員時(shí),不能對(duì)其初始化。如: classtest{ inttx=5,y=6; externfloatx; …}(4)在定義一個(gè)類時(shí),對(duì)其成員指定訪問權(quán)限的原那么是:假設(shè)定義的成員限于該類的成員函數(shù)使用時(shí),應(yīng)指定其為私有成員;假設(shè)允許類外使用該成員時(shí),應(yīng)將其訪問權(quán)限定義為公有的。在定義一個(gè)類時(shí),須注意以下幾點(diǎn):
在定義一個(gè)類時(shí),其成員函數(shù)的函數(shù)體定義也可以在定義類的類體中直接定義,即在類中直接定義成員函數(shù)—稱為內(nèi)聯(lián)函數(shù)。
定義內(nèi)聯(lián)成員函數(shù)的另一種方法是,在類體中只是給出成員函數(shù)的原型說明,在類體外定義成員函數(shù)時(shí),與定義一般的內(nèi)聯(lián)函數(shù)一樣,在成員函數(shù)的定義前面加上關(guān)鍵定inline。內(nèi)聯(lián)(inline)成員函數(shù)
內(nèi)聯(lián)函數(shù)與一般函數(shù)的區(qū)別是,編譯器在生成目標(biāo)代碼時(shí),在調(diào)用這個(gè)函數(shù)的位置裝上這個(gè)函數(shù)的實(shí)際代碼,而不是處理成一個(gè)函數(shù)調(diào)用。因此可以加快程序的運(yùn)行速度,缺點(diǎn)是占用內(nèi)存空間。所以在C++中如果定義的函數(shù)是一個(gè)小函數(shù),在整個(gè)代碼調(diào)用它地方又相對(duì)少,就應(yīng)該用inline定義為內(nèi)聯(lián)函數(shù)。classperson{ private: charName[12]; intAge; charSex[4]; public: voidRegisterPerson(char*name,intage,char*sex) { strcpy(Name,name); Age=age; strcpy(Sex,sex); } voidGetName(char*); intGetAge(void); voidGetSex(char*);};inlinevoidPerson::GetName(char*name){ strcpy(name,Name); }…….例4.3在類體中直接定義成員函數(shù)的函數(shù)體存儲(chǔ)類型類名對(duì)象列表;如:personP1,P2;說明了兩個(gè)對(duì)象P1和P2,它們均是類person的對(duì)象。在程序執(zhí)行時(shí),通過為對(duì)象分配存儲(chǔ)空間來創(chuàng)立對(duì)象,在創(chuàng)立對(duì)象時(shí),被用作樣板。參見下表:4.1.3對(duì)象的創(chuàng)立與使用
對(duì)象是類的一個(gè)實(shí)例,對(duì)象必須先定義然后才能使用。說明對(duì)象的一般格式為:表4-1類person的兩個(gè)實(shí)例P1和P2對(duì)象P1對(duì)象P2P1.NameP2.NameP1.AgeP2.AgeP1.SexP2.SexP1.RegisterPerson()P2.RegisterPerson()P1.GetName()P2.GetName()P1.GetAge()P2.GetAge()P1.GetSex()P2.GetSex()
為了減少成員函數(shù)所占用的空間,在建立對(duì)象時(shí),只為對(duì)象分配用于保存成員數(shù)據(jù)的內(nèi)存空間,而成員函數(shù)的代碼為該類的每一個(gè)對(duì)象所共享。類中定義的成員函數(shù)的代碼被放在計(jì)算機(jī)內(nèi)存的一個(gè)公用區(qū)中,并供該類的所有對(duì)象共享。但邏輯上,我們?nèi)詫⒚恳粋€(gè)對(duì)象理解為由獨(dú)立的成員數(shù)據(jù)和各自的成員函數(shù)代碼組成。有兩種方法可存儲(chǔ)對(duì)象。
數(shù)據(jù)區(qū)代碼區(qū)對(duì)象1數(shù)據(jù)區(qū)代碼區(qū)對(duì)象2數(shù)據(jù)區(qū)代碼區(qū)對(duì)象n......圖4.1各對(duì)象完全獨(dú)立地安排內(nèi)存的方案數(shù)據(jù)區(qū)對(duì)象1數(shù)據(jù)區(qū)對(duì)象2數(shù)據(jù)區(qū)對(duì)象n......圖4.2各對(duì)象的代碼區(qū)共用的方案公共代碼區(qū)圖4.1對(duì)應(yīng)的是在類說明中定義函數(shù),而圖4.2對(duì)應(yīng)的是在類說明外部定義函數(shù)。如果在類外定義函數(shù)并使用inline,那么系統(tǒng)也會(huì)采用內(nèi)聯(lián)擴(kuò)展方式實(shí)現(xiàn),每個(gè)對(duì)象都有該函數(shù)的一份獨(dú)立的代碼。方法1:classA{public: intr,t;};Ax,y;方法2:classB{ intI,j;public: voidSetdata(inta,intb) { I=a;j=b;} voidprint(void) {cout<<I<<‘\t’<<j<<‘\n’;}}b1,b2;方法3:class{public: intc,d;}t1,t2={100,200}
類對(duì)象的初始化僅限于對(duì)類的公有成員數(shù)據(jù),如方法3。當(dāng)類中的成員數(shù)據(jù)被指定為私有或保護(hù)類型時(shí),定義對(duì)象時(shí)不允許對(duì)它的成員數(shù)據(jù)進(jìn)行初始化操作,如:Bb3={500,600};是非法的。實(shí)際上私有成員只能由類的成員函數(shù)對(duì)其數(shù)據(jù)進(jìn)行操作,而初始化顯然是一個(gè)外部過程,所以這樣的操作是非法的。另外,類對(duì)象中成員數(shù)據(jù)的初始化操作一般是由構(gòu)造函數(shù)或拷貝初始化構(gòu)造函數(shù)來實(shí)現(xiàn)。
在定義了類的對(duì)象以后,可以使用成員運(yùn)算符“.”
來訪問類的成員。但對(duì)于公有成員、私有成員及保護(hù)成員,在使用上存在差異。#include<iostream.h>#include<math.h>ClassCRect{ private: intleft,top;//矩形的左上角坐標(biāo)
public: intright,bottom;//矩形的右下角坐標(biāo)
voidsetcoord(int,int,int,int); //設(shè)置坐標(biāo)值的函數(shù)
voidgetcoord(int*L,int*R,int*T,int*B)//取坐標(biāo)值的函數(shù)
{*L=left;*R=right;*T=top;*B=bottom; } voidPrint(void) {cout<<“area=“<<fabs(right-left)*fabs(bottom-top)<<‘\n’;}};例:描述一個(gè)矩形對(duì)象,設(shè)置矩形的坐標(biāo),并輸出其相應(yīng)的坐標(biāo)值。voidCRect::setcoord(intL,intR,intT,intB){ left=L;right=R; top=T;bottom=B;}voidmain(void){ CRectr,rr; inta,b,c,d; r.setcoord(100,300,50,200); cout<<“right=”<<r.right<<‘\n’; cout<<“bottom=”<<r.bottom<<‘\n’; r.getcoord(&a,&b,&c,&d); cout<<“l(fā)eft=”<<a<<‘\n’; cout<<“top=”<<c<<‘\n’; r.Print(); rr=r; rr.Print();}結(jié)果為:right=300;bottom=200;left=100;top=50;area=30000;area=30000;幾點(diǎn)說明:在類的外部,只能訪問類的公有成員,而不能訪問類的私有成員或保護(hù)成員。例如:a=r.left;c=r.top;都是不允許的,因?yàn)槌蓡Tleft和top都是私有成員。假設(shè)要訪問類對(duì)象的私有成員,只能通過對(duì)象的公有成員函數(shù)來獲取。如例中的r.getcoord(&a,&b,&c,&d);2.同類型的對(duì)象之間可以整體賦值,例如:rr=r;將對(duì)象r的所有成員依次賦給對(duì)象rr的成員,這種賦值與對(duì)象的成員訪問權(quán)限無關(guān)。3.對(duì)象用作函數(shù)的參數(shù)時(shí),屬于賦值調(diào)用;函數(shù)也可
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 艦橋上行走的規(guī)則
- 城市綜合管廊建設(shè)與管理解決方案
- 環(huán)境科學(xué)中關(guān)于全球氣候變化試題
- 企業(yè)ERP系統(tǒng)集成服務(wù)項(xiàng)目合同
- 地理信息系統(tǒng)應(yīng)用知識(shí)點(diǎn)梳理與考核試題集
- 建筑結(jié)構(gòu)與建筑設(shè)計(jì)練習(xí)題庫
- 現(xiàn)代管理學(xué)原理應(yīng)用問題解析題
- 企業(yè)研發(fā)投入與轉(zhuǎn)化效率對(duì)比表
- 建筑工程施工承包協(xié)議
- 個(gè)性化學(xué)習(xí)服務(wù)平臺(tái)構(gòu)建及實(shí)施方案設(shè)計(jì)
- 數(shù)學(xué)家的故事華羅庚
- 山塘維修加固工程監(jiān)理實(shí)施細(xì)則
- VDA6.3:2023 汽車核心工具自我評(píng)估測(cè)試題庫真題 (含答案)
- 殯儀服務(wù)員考試殯儀服務(wù)員考試考點(diǎn)模擬考試練習(xí)
- 外國(guó)文學(xué)理論知到章節(jié)答案智慧樹2023年湖南師范大學(xué)
- 【建模教程】-數(shù)學(xué)建模教案
- 全口義齒修復(fù)有關(guān)的基本知識(shí) 全口義齒固位和穩(wěn)定
- 2023年湖南食品藥品職業(yè)學(xué)院高職單招(數(shù)學(xué))試題庫含答案解析
- GB/T 2481.1-1998固結(jié)磨具用磨料粒度組成的檢測(cè)和標(biāo)記第1部分:粗磨粒F4~F220
- GB/T 20878-2007不銹鋼和耐熱鋼牌號(hào)及化學(xué)成分
- 第2課《說和做》課件-部編版語文七年級(jí)下冊(cè)
評(píng)論
0/150
提交評(píng)論