C++深入探索類和對(duì)象之封裝及class與struct的區(qū)別_第1頁(yè)
C++深入探索類和對(duì)象之封裝及class與struct的區(qū)別_第2頁(yè)
C++深入探索類和對(duì)象之封裝及class與struct的區(qū)別_第3頁(yè)
C++深入探索類和對(duì)象之封裝及class與struct的區(qū)別_第4頁(yè)
C++深入探索類和對(duì)象之封裝及class與struct的區(qū)別_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第C++深入探索類和對(duì)象之封裝及class與struct的區(qū)別目錄封裝的意義訪問(wèn)權(quán)限class和struct的區(qū)別成員屬性私有案例練習(xí)

封裝的意義

封裝是C++三大面向?qū)ο笾?/p>

意義:

1、設(shè)計(jì)類的時(shí)候,屬性和行為寫(xiě)在一起,表現(xiàn)事物

2、類在設(shè)計(jì)時(shí),可以把屬性和行為放在不同的權(quán)限下,加以控制

語(yǔ)法:class類名{訪問(wèn)權(quán)限:屬性/行為};

示例1:設(shè)計(jì)一個(gè)直角三角形,并求解他的面積

#includeiostream

usingnamespacestd;

//class代表設(shè)計(jì)一個(gè)類,后面跟著的是類名

classtaiAngle

public://訪問(wèn)權(quán)限公共的權(quán)限

//屬性

intm_a;//直角邊a

intm_b;//直角邊b

//行為

//獲取三角形面積

doublecalculate()

return(m_a*m_b)/2;

intmain(){

//通過(guò)三角形類,創(chuàng)建三角形的對(duì)象

//c1就是一個(gè)具體的三角形

taiAnglec1;

c1.m_a=10;//給三角形兩邊進(jìn)行賦值操作

c1.m_b=10;

cout"三角形的面積為:"c1.calculate()endl;//調(diào)用方法

system("pause");

return0;

}

示例2:設(shè)計(jì)一個(gè)學(xué)生類,屬性有姓名和學(xué)號(hào),可以給姓名和學(xué)號(hào)賦值,顯示學(xué)生的姓名和學(xué)號(hào)

//學(xué)生類

classStudent{

public:

voidsetName(stringname){

m_name=name;

voidsetID(intid){

m_id=id;

voidshowStudent(){

cout"name:"m_name"ID:"m_idendl;

private:

stringm_name;

intm_id;

intmain(){

Studentstu;

stu.setName("馬可波羅");

stu.setID(250);

stu.showStudent();

system("pause");

return0;

在第二個(gè)案例中,姓名和學(xué)號(hào)是不會(huì)被直接訪問(wèn)的,主函數(shù)中我們創(chuàng)建了stu學(xué)生類對(duì)象,但是我們輸入stu.時(shí)不會(huì)出現(xiàn)m_name和m_id的提示,這就牽扯到了訪問(wèn)權(quán)限的知識(shí)點(diǎn),處于私有權(quán)限的屬性只能靠成員方法加以控制,繼續(xù)往下看

訪問(wèn)權(quán)限

public公共權(quán)限:

成員:類內(nèi)可以訪問(wèn),類外可以訪問(wèn)

任何一種繼承,子類可以訪問(wèn)父類的公共成員

保護(hù)權(quán)限protected

成員:類內(nèi)可以訪問(wèn),類外不可以訪問(wèn)

任何一種繼承,子類可以訪問(wèn)父類的保護(hù)成員

私有權(quán)限private

成員:類內(nèi)可以訪問(wèn),類外不可以訪問(wèn)。

任何一種繼承,子類不可以訪問(wèn)父類的私有成員

示例:

classPerson

//姓名公共權(quán)限

public:

stringm_Phone;

//手機(jī)保護(hù)權(quán)限

protected:

stringm_Phone;

//銀行卡密碼私有權(quán)限

private:

intm_Password;

public:

voiddisplay();

voidPerson::display()

m_Name="張三";

m_Phone="華為";

m_Password=123456;

intmain(){

Personp;

p.m_Name="李四";

//p.m_Phone="iPhone13";//保護(hù)權(quán)限類外訪問(wèn)不到

//p.m_Password=123;//私有權(quán)限類外訪問(wèn)不到

system("pause");

return0;

}

這個(gè)案例中定義了三種權(quán)限的屬性,只有punlic:權(quán)限下的屬性和成員函數(shù)可以在類外被調(diào)用;這里的display方法我在public:權(quán)限下只是聲明的一下,然后在類外完成方法的實(shí)現(xiàn),但是需要在原來(lái)聲明的基礎(chǔ)上加Person::在返回值類型和函數(shù)名之間,以表示是Person這個(gè)類作用域下的display方法;main函數(shù)只可以調(diào)用display方法和修改m_Name屬性,因?yàn)橹挥羞@兩個(gè)在punlic:權(quán)限下了。

class和struct的區(qū)別

在C++中struct和class唯一的區(qū)別就在于默認(rèn)的訪問(wèn)權(quán)限不同

class默認(rèn)權(quán)限是私有

struct默認(rèn)權(quán)限是公共

示例:

classC1

intm_A;//默認(rèn)是私有權(quán)限

structC2

intm_A;//默認(rèn)是公共權(quán)限

intmain(){

C1c1;

c1.m_A=10;//錯(cuò)誤,訪問(wèn)權(quán)限是私有

C2c2;

c2.m_A=10;//正確,訪問(wèn)權(quán)限是公共

system("pause");

return0;

}

class和struct中都定義了m_A屬性,但是main函數(shù)中是無(wú)法修改類c1對(duì)象的m_A屬性的

成員屬性私有

優(yōu)點(diǎn)1:將所有成員屬性設(shè)置為私有,可以自己控制讀寫(xiě)權(quán)限

優(yōu)點(diǎn)2:對(duì)于寫(xiě)權(quán)限,我們可以檢測(cè)數(shù)據(jù)的有效性

示例:

classPerson{

public:

//姓名設(shè)置可讀可寫(xiě)

voidsetName(stringname){

m_Name=name;

stringgetName()

returnm_Name;

//獲取年齡

intgetAge(){

returnm_Age;

//設(shè)置年齡

voidsetAge(intage){

if(age0||age150){

cout"你個(gè)大烏龜!"endl;

return;

m_Age=age;

//情侶設(shè)置為只寫(xiě)

voidsetLover(stringlover){

m_Lover=lover;

private:

stringm_Name;//可讀可寫(xiě)姓名

intm_Age;//只讀年齡

stringm_Lover;//只寫(xiě)愛(ài)人

intmain()

Personp;

//姓名設(shè)置

p.setName("張三");

cout"姓名:"p.getName()endl;

//年齡設(shè)置

p.setAge(50);

cout"年齡:"p.getAge()endl;

//愛(ài)人設(shè)置

p.setLover("阿尼亞");

//cout"愛(ài)人:"p.m_Loverendl;//只寫(xiě)屬性,不可以讀取

system("pause");

return0;

}

當(dāng)屬性都設(shè)計(jì)成私有時(shí),我們可以自己控制屬性的讀寫(xiě)權(quán)限,讓程序更具有強(qiáng)壯性,通過(guò)寫(xiě)方法來(lái)讀寫(xiě)屬性,是不是很具有掌控性呢,接下來(lái)給出一個(gè)案例,加深理解。

案例練習(xí)

利用全局函數(shù)和成員方法兩種方式判斷兩個(gè)立方體是否相等,要求利用類的知識(shí),將屬性設(shè)置為私有。

參考代碼:

#includeiostream

usingnamespacestd;

//案例1判斷兩個(gè)立方體是否相等

classCube

public:

voidsetL(intl)

m_L=l;

intgetL()

returnm_L;

voidsetW(intw)

m_W=w;

intgetW()

returnm_W;

voidsetH(inth)

m_H=h;

intgetH()

returnm_H;

intArea(inta,intb,intc)

return2*(a*b+a*c+b*c);

int體積(inta,intb,intc)

returna*b*c;

boolisSameByClass(Cubex)

if(x.getH()==m_Hx.getL()==m_Lx.getW()==m_W)

returntrue;

else{

returnfalse;

private:

intm_L;

intm_W;

intm_H;

//利用全局函數(shù)判斷,兩個(gè)立方體是否相等

boolisSame(Cubec1,Cubec2)

if(c1.getL()==c2.getL()c1.getW()==c2.getW()c1.getH()==c2.getH())

returntrue;

else

returnfalse;

intmain()

Cubec1;

c1.setH(10);

c1.setL(10);

c1.setW(10);

Cubec2;

c2.setH(10);

c2.setL(10);

c2.setW(10);

cout"面積為:"c1.Area(c1.getH(),c1.getH(),c1.getL())endl;

cout"體積為:"c1.體積(c1.getH(),c1.getH(),c1.getL())endl;

//利用成員函數(shù)判斷立方體

if(c1.isSameByClass(c2))

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論