版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 湖南省三湘名校教育聯(lián)盟2024-2025學(xué)年高二上學(xué)期期中大聯(lián)考物理試題含解析高二物理答案
- 2026年中式面點(diǎn)師高級(jí)技能考核試題及答案
- 2026年企業(yè)技術(shù)部工作計(jì)劃
- 2026年公司微博運(yùn)營(yíng)管理工作計(jì)劃
- 公司制度試題(化工)附參考答案
- 住宿衛(wèi)生管理制度范文(4篇)
- 車間維修工安全生產(chǎn)崗位責(zé)任制(5篇)
- 質(zhì)量管理體系高級(jí)審核員面試試題及答案
- 2026年保潔公司物業(yè)合同三篇
- 醫(yī)療健康領(lǐng)域疾病預(yù)防承諾書(shū)范文9篇
- 江蘇省鹽城市大豐區(qū)四校聯(lián)考2025-2026學(xué)年七年級(jí)上學(xué)期12月月考?xì)v史試卷(含答案)
- 2026年黑龍江農(nóng)業(yè)經(jīng)濟(jì)職業(yè)學(xué)院?jiǎn)握芯C合素質(zhì)考試參考題庫(kù)附答案詳解
- 文化IP授權(quán)使用框架協(xié)議
- 2024年廣西壯族自治區(qū)公開(kāi)遴選公務(wù)員筆試試題及答案解析(綜合類)
- 湖北煙草專賣局招聘考試真題2025
- 人教部編五年級(jí)語(yǔ)文下冊(cè)古詩(shī)三首《四時(shí)田園雜興(其三十一)》示范公開(kāi)課教學(xué)課件
- AI領(lǐng)域求職者必看美的工廠AI面試實(shí)戰(zhàn)經(jīng)驗(yàn)分享
- 4.2《揚(yáng)州慢》課件2025-2026學(xué)年統(tǒng)編版高中語(yǔ)文選擇性必修下冊(cè)
- 鄉(xiāng)鎮(zhèn)應(yīng)急管理培訓(xùn)
- 捻線工三級(jí)安全教育(公司級(jí))考核試卷及答案
- 學(xué)校智慧校園建設(shè)協(xié)議
評(píng)論
0/150
提交評(píng)論