C++中封裝的含義和簡單實現方式_第1頁
C++中封裝的含義和簡單實現方式_第2頁
C++中封裝的含義和簡單實現方式_第3頁
C++中封裝的含義和簡單實現方式_第4頁
C++中封裝的含義和簡單實現方式_第5頁
全文預覽已結束

下載本文檔

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

文檔簡介

第C++中封裝的含義和簡單實現方式目錄封裝實現封裝屬性class封裝其實封裝并不是編程中的一個思想,對于很多領域來說都是這樣。對于電子器件來說,我們不關心其內部的結構,只在乎該器件能夠實現什么樣的功能。這樣對于顧客來說,不用花時間研究內部的實現過程,而對于商家來說,也可以更好的保護它們的商業秘密。

而對于C++來說也是這樣,借由數據類型也可以實現封裝。這樣做的好處就是對外屏蔽了功能實現,對內開放了數據權限。

C++中的類和對象是經由C中的struct發展而來的,就好像struct是由數組發展而來的一樣。因此我們可以先通過struct實現封裝。

封裝實現

#includeiostream

usingstd::cout;

usingstd::endl;

typedefstructcomplex

intx;

inty;

}COMP;

voidinit(COMPtmp,intx,inty)

tmp.x=x;

tmp.y=y;

COMP*operator+(COMPtmp1,COMPtmp2)

COMP*p=static_castCOMP*(newCOMP);

p-x=tmp1.x+tmp2.x;

p-y=tmp1.y+tmp2.y;

returnp;

COMP*operator-(COMPtmp1,COMPtmp2)

COMP*p=static_castCOMP*(newCOMP);

p-x=tmp1.x-tmp2.x;

p-y=tmp1.y-tmp2.y;

returnp;

COMP*operator*(COMPtmp1,COMPtmp2)

COMP*p=static_castCOMP*(newCOMP);

p-x=tmp1.x*tmp2.x-tmp1.y*tmp2.y;

p-y=tmp1.x*tmp2.y+tmp1.y*tmp2.x;

returnp;

intmain()

COMPx,y;

init(x,1,2);

init(y,3,4);

coutx.x""x.yendl;

couty.x""y.yendl;

COMP*z;

z=x+y;

coutz-x""z-yendl;

deletez;

z=x-y;

coutz-x""z-yendl;

deletez;

z=x*y;

coutz-x""z-yendl;

deletez;

return0;

}

結果為:

12

34

46

-2-2

-510

上面的程序使用struct構建了類似復數的結果,并使用運算符重載實現了復數的加、減、乘運算。這樣如果我們要進行復數的運算的話,可以直接使用+-*而不用具體關心內部的實現過程,因為我們在意的只是結果的正確性。

封裝屬性

封裝的作用就像之前提到的那樣:對外提供接口,對內提供數據。

雖然上邊的函數在全局構建了接口函數,但是卻也暴露了函數的實現過程,并且我們還能夠在外部直接訪問struct內的數據,這并不是我們想要的封裝形式。這是由struct的性質決定的,在C++中,提供了class的形式實現整個的封裝過程。

struct和class的不同在于,struct中的數據和方法都是public的,而class中的數據和方法卻是可以自定義的:

屬性內部外部publicyesyes

protectedyesnoprivateyesno

protected和private的區別在繼承形式上。

class封裝

對于上邊的complex,如果使用class來封裝:

#includeiostream

usingstd::cout;

usingstd::endl;

classcomplex

public:

complex()

this-x=0;

this-y=0;

complex(intx,inty):x(x),y(y){}

complex*operator+(complextmp)

complex*p=static_castcomplex*(newcomplex);

p-x=this-x+tmp.x;

p-y=this-y+tmp.y;

returnp;

complex*operator-(complextmp)

complex*p=static_castcomplex*(newcomplex);

p-x=this-x-tmp.x;

p-y=this-y-tmp.y;

returnp;

complex*operator*(complextmp)

complex*p=static_castcomplex*(newcomplex);

p-x=this-x*tmp.x-this-y*tmp.y;

p-y

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論