C++深入分析講解類的知識(shí)點(diǎn)_第1頁
C++深入分析講解類的知識(shí)點(diǎn)_第2頁
C++深入分析講解類的知識(shí)點(diǎn)_第3頁
C++深入分析講解類的知識(shí)點(diǎn)_第4頁
C++深入分析講解類的知識(shí)點(diǎn)_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第C++深入分析講解類的知識(shí)點(diǎn)目錄知識(shí)點(diǎn)引入類的初識(shí)1、封裝2、權(quán)限3、類的定義(定義類型)4、類的成員函數(shù)與類中聲明及類外定義Person類的設(shè)計(jì)設(shè)計(jì)立方體類點(diǎn)Point和圓Circle的關(guān)系

知識(shí)點(diǎn)引入

C語言中數(shù)據(jù)和方法是獨(dú)立:

//c語言的思想:數(shù)據(jù)方法分開

typedefstruct

charname[32];

intage;

}Person;

typedefstruct

charname[32];

intage;

inttype;

}Dog;

voidPersonEat(Person*p)

coutp-name"正在吃飯"endl;

voidDogEat(Dog*d)

coutd-name"正在吃狗糧,汪汪"endl;

voidtest01()

Personperson={"老王",43};

Dogdog={"旺財(cái)",6};

PersonEat(person);

DogEat(dog);

//出現(xiàn)一個(gè)問題(數(shù)據(jù)方法獨(dú)立容易造成方法調(diào)用錯(cuò)誤數(shù)據(jù))

DogEat((Dog*)person);

}

類的初識(shí)

1、封裝

把變量(屬性)和函數(shù)(操作)合成一個(gè)整體,封裝在一個(gè)類中

對變量和函數(shù)進(jìn)行訪問控制(公有、私有、保護(hù))

類的封裝:將數(shù)據(jù)和方法封裝在一起加以權(quán)限區(qū)分用戶只能通過公共方法訪問私有數(shù)據(jù)。

2、權(quán)限

private私有public公有protected保護(hù)

private私有:類外部不可直接訪問私有數(shù)據(jù)類內(nèi)部可以訪問

protected保護(hù):類外部不可直接訪問私有數(shù)據(jù)類內(nèi)部可以訪問

public公有:類外部可以訪問私有數(shù)據(jù)類內(nèi)部可以訪問

權(quán)限只是針對類的外部,類的內(nèi)部沒有權(quán)限之分

class類名{//抽象的概念系統(tǒng)不會(huì)為其分配空間

private://私有類的外部不可直接訪問

protected://保護(hù)類的外部不可直接訪問

數(shù)據(jù)

public://公有類的外部可以直接訪問

方法

//在類的內(nèi)部沒有權(quán)限之分都可以相互訪問

};

案例:

classPerson//抽象的概念

{//類的內(nèi)部

private:

intm_money;//私有數(shù)據(jù)

protected:

intm_age;

public:

voiddese()

m_money=100;

m_age=18;

cout"我有房有車又年輕"m_age"歲又有錢"m_money"萬美金我就愛嘚瑟"endl;

voidtest01()

//用類去實(shí)例化一個(gè)對象(就是用Person定義一個(gè)變量)

Personlucy;

//cout"兄弟你的錢:"lucy.m_moneyendl;//err內(nèi)的外部不可訪問

//cout"兄弟你的年齡:"lucy.m_ageendl;//err內(nèi)的外部不可訪問

lucy.dese();//ok公有的類的外部可用訪問

//privateprotected雖然是私有、保護(hù)的類外不可訪問但是用戶可以借助public公有的方法

//間接的訪問私有、保護(hù)的數(shù)據(jù)

}

class默認(rèn)是私有的數(shù)據(jù)私有方法公有用戶就可以借助公有方法間接的操作私有數(shù)據(jù)

3、類的定義(定義類型)

關(guān)鍵字class

#includeiostream

usingnamespacestd;

//類的定義:是不占空間只有用類實(shí)例化對象的時(shí)候系統(tǒng)為對象開辟空間

classData

private://私有

//inta=10;//err定義類的時(shí)候盡量不要給成員賦值

inta;//成員數(shù)據(jù)

protected://保護(hù)

intb;

public://公有

intc;

//成員函數(shù)

voiddata_show(void)

//類的內(nèi)部:沒有權(quán)限區(qū)分

couta","b","cendl;

//類中的數(shù)據(jù)成員擁有獨(dú)立的空間

voidtest01()

//使用Data實(shí)例化一個(gè)對象名為ob的對象

Dataob;

//成員數(shù)據(jù)依賴于對象的

//cout"ob.a="ob.aendl;//erra為私有類外不能直接訪問

//cout"ob.b="ob.bendl;//errb為保護(hù)類外不能直接訪問

cout"ob.c="ob.cendl;//errc為公有類外可以直接訪問

//對象通過公共方法間接調(diào)用私用數(shù)據(jù)

ob.data_show();

intmain(intargc,char*argv[])

test01();

return0;

}

4、類的成員函數(shù)與類中聲明及類外定義

classData2

//默認(rèn)為私有

inta;

public:

//類中聲明類外定義

voidsetA(intv);

intgetA(void);

voidData2::setA(intv)

a=v;

return;

intData2::getA()

returna;

voidtest02()

Data2ob;

ob.setA(100);

cout"a="ob.getA()endl;

}

Person類的設(shè)計(jì)

設(shè)計(jì)一個(gè)Person類型

設(shè)計(jì)一個(gè)Person類,Person類具有name和age屬性,提供初始化函數(shù)(Init),并提供對name和age的讀寫函數(shù)(set,get),但必須確保age的賦值在有效范圍內(nèi)(0-100),超出有效范圍,則拒絕賦值,并提供方法輸出姓名和年齡。

person.h:

#ifndefPERSON_H

#definePERSON_H

//類的頭文件:一般定義成員數(shù)據(jù)聲明成員函數(shù)

classPerson

private:

charm_name[32];

intm_age;

public:

//初始化m_namem_age

voidinit(char*name,intage);

//設(shè)置name

voidsetName(char*name);

//獲取name

char*getName(void);

//設(shè)置age

voidsetAge(intage);

//獲取age

intgetAge(void);

//顯示m_namem_age

voidshowPerons(void);

#endif//PERSON_H

person.cpp:

#include"person.h"

//#includestring.h

#includecstring

#includeiostream

usingnamespacestd;

//定義類的成員函數(shù)

voidPerson::init(char*name,intage)

strcpy(m_name,name);

if(age=0age=100)

m_age=age;

else

cout"年齡輸入非法"endl;

voidPerson::setName(char*name)

strcpy(m_name,name);

return;

char*Person::getName()

returnm_name;

voidPerson::setAge(intage)

if(age=0age=100)

m_age=age;

else

cout"年齡輸入非法"endl;

return;

intPerson::getAge()

returnm_age;

voidPerson::showPerons()

cout"姓名:"m_name",年齡:"m_ageendl;

return;

}

main.cpp

#includeiostream

#include"person.h"

usingnamespacestd;

intmain(intargc,char*argv[])

Personob;

ob.init("lucy",18);

ob.showPerons();

ob.setName("bob");

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

ob.setAge(19);

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

return0;

}

設(shè)計(jì)立方體類

設(shè)計(jì)立方體類(Cube),求出立方體的面積(2ab+2ac+2bc)和體積(a*b*c),分別用全局函數(shù)和成員函數(shù)判斷兩個(gè)立方體是否相等

cube.h

#ifndefCUBE_H

#defineCUBE_H

classCube

private:

intm_l;

intm_w;

intm_h;

public:

voidsetL(intl);

intgetL(void);

voidsetW(intw);

intgetW(void);

voidsetH(inth);

intgetH(void);

intgetS(void);

intgetV(void);

boolcompareCube(Cubeob);

#endif//CUBE_H

cube.cpp

#include"cube.h"

voidCube::setL(intl)

m_l=l;

return;

intCube::getL()

returnm_l;

voidCube::setW(intw)

m_w=w;

return;

intCube::getW()

returnm_w;

voidCube::setH(inth)

m_h=h;

return;

intCube::getH()

returnm_h;

intCube::getS()

return(m_l*m_w+m_w*m_h+m_l*m_h)*2;

intCube::getV()

returnm_l*m_w*m_h;

boolCube::compareCube(Cubeob)

if((m_l==ob.m_l)(m_w==ob.m_w)(m_h==ob.m_h))

returntrue;

else

returnfalse;

}

main.cpp

#includeiostream

#include"cube.h"

usingnamespacestd;

boolmyCompareCube(Cubeob1,Cubeob2)

if((ob1.getL()==ob2.getL())\

(ob1.getW()==ob2.getW())(ob1.getH()==ob2.getH()))

returntrue;

else

returnfalse;

intmain(intargc,char*argv[])

Cubeob1;

ob1.setL(10);

ob1.setW(10);

ob1.setH(10);

cout"面積為:"ob1.getS()endl;

cout"體積為:"ob1.getV()endl;

Cubeob2;

ob2.setL(10);

ob2.setW(20);

ob2.setH(10);

if(pareCube(ob2)==true)

cout"相等"endl;

else

cout"不相等"endl;

if(myCompareCube(ob1,ob2)==true)

cout"相等"endl;

else

cout"不相等"endl;

return0;

}

點(diǎn)Point和圓Circle的關(guān)系

#includeiostream

usingnamespacestd;

classPoint

private:

intm_x;

intm_y;

public:

voidsetX(intx)

m_x=x;

intgetX(void)

returnm_x;

voidsetY(inty)

m_y=y;

intgetY(void)

returnm_y;

classCircle

private:

Pointm_p;

intm_r;

public:

voidsetPoint(intx,inty)

m_p.setX(x);

m_p.setY(y);

voidsetR(intr

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論