C++核心編程之類和對(duì)象詳解
C++面向?qū)ο笕筇匦裕?code>封裝、繼承、多態(tài)
1.封裝
1.1封裝的意義
- 將屬性和行為作為一個(gè)整體
- 將屬性和行為加以權(quán)限控制
封裝意義一:
語(yǔ)法:class 類名{ 訪問權(quán)限: 屬性 / 行為 };
//實(shí)例1 #define _CRT_SECURE_NO_WARNINGS 1 //求圓的周長(zhǎng) #include<iostream> using namespace std; #define pi 3.14 class circle { public: int m_d;//直徑 double calculate() { return pi*m_d; } }; int main() { circle c1; c1.m_d = 10; cout << "圓周長(zhǎng)為" << c1.calculate() << endl; system("pause"); return 0; }
//實(shí)例2 #define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std; #include <string> class Student { public: string m_name; int m_num; void showStudent() { cout << " 姓名:" << "\t" << m_name << " 學(xué)號(hào):" << m_num << endl; } void setname(string name) { m_name = name; } void setnum(int num) { m_num = num; } }; int main() { Student s1; s1.setname("zhangsan"); s1.setnum(2001); s1.showStudent(); Student s2; s2.setname("lisi"); s2.setnum(2002); s2.showStudent(); system("pause"); return 0; }
總結(jié):類中的 屬性 和 行為 統(tǒng)一稱為 成員
類中的 屬性 又稱為 成員屬性 成員變量
類中的 行為 又稱為 成員函數(shù) 成員方法
封裝意義二
訪問權(quán)限有三種
公共權(quán)限: public 成員類內(nèi)可以訪問,類外可以訪問
保護(hù)權(quán)限: protected 成員類內(nèi)可以訪問,類外不可以訪問 兒子可以訪問父親中的保護(hù)內(nèi)容
私有權(quán)限: private 成員類內(nèi)可以訪問,類外不可以訪問 兒子不可以訪問父親中的保護(hù)內(nèi)容
#define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std; #include <string> class Student { public: string m_name; protected: int m_num; private: int m_age; public: void func() { m_name = "lili"; m_num = 1; m_age = 30; } private: void func1() { m_name = "lili"; m_num = 1; m_age = 30; } }; int main() { Student s1; s1.m_name = "lilllll"; //s1.m_num = 2;//不可訪問 //s1.m_age = 20;//不可訪問 s1.func(); //s1.func1();//不可訪問 system("pause"); return 0; }
1.2 struct 和 class 區(qū)別
在C++中 struct 和 class 區(qū)別在于 默認(rèn)的訪問權(quán)限不同
- struct 默認(rèn)權(quán)限為公共
- class 默認(rèn)權(quán)限為私有
#define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std; class C1 { string m_a; }; struct C2 { string m_b; }; int main() { //C1 c1; //c1.m_a = "lili";//不可訪問 C2 c2; c2.m_b = "lili"; system("pause"); return 0; }
1.3 成員屬性設(shè)置為私有
優(yōu)點(diǎn):
- 將所有成員屬性設(shè)置為私有,可以自己控制讀寫權(quán)限
- 對(duì)于寫權(quán)限,我們可以檢測(cè)數(shù)據(jù)的有效性
#define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> #include <string> using namespace std; class C1 { public: void setname(string name) { m_name = name; } string getname() { return m_name; } int getnum() { return m_num; } void setage(int age) { m_age = age; } private: string m_name; int m_num; int m_age; }; int main() { C1 c; c.setname("yangyang");//可寫 cout << c.getname() << endl;//可讀 cout << c.getnum() << endl;//只讀 c.setage(30);//只寫 system("pause"); return 0; }
好的,到這里封裝就算是學(xué)到手了,可以進(jìn)行兩個(gè)小案例:
#define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> #include <string> using namespace std; class Cube { public: void setchang(int chang) { m_c = chang; } void setkuan(int kuan) { m_k = kuan; } void setgao(int gao) { m_g = gao; } int getchang() { return m_c; } int getkuan() { return m_k; } int getgao() { return m_g; } int S() { return 2 * (m_c*m_g + m_c*m_k + m_g*m_k); } int V() { return m_c*m_g*m_k; } bool isSamebyclass(Cube &c) { if (m_c == c.getchang() && m_g == c.getgao() && m_k == c.getkuan()) { return true; } return false; } private: int m_c; int m_k; int m_g; }; bool isSame1(Cube &c1, Cube &c2) { if (c1.getchang() == c2.getchang() && c1.getgao() == c2.getgao() && c1.getkuan() == c2.getkuan()) { return true; } return false; } int main() { Cube c1; c1.setchang(10); c1.setkuan(10); c1.setgao(10); cout << "面積:" << c1.S() << endl; cout << "體積:" << c1.V() << endl; Cube c2; c2.setchang(11); c2.setkuan(11); c2.setgao(11); cout << "面積:" << c2.S() << endl; cout << "體積:" << c2.V() << endl; bool ret = isSame1(c1, c2); if (ret) { cout << "全局函數(shù)判斷:兩個(gè)立方體相等" << endl; } else { cout << "全局函數(shù)判斷:兩個(gè)立方體不相等" << endl; } ret = c1.isSamebyclass(c2); if (ret) { cout << "成員函數(shù)判斷:兩個(gè)立方體相等" << endl; } else { cout << "成員函數(shù)判斷:兩個(gè)立方體不相等" << endl; } system("pause"); return 0; }
#define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> #include <string> using namespace std; class Point { public: void setX(int x) { m_x = x; } int getX() { return m_x; } void setY(int y) { m_y = y; } int getY() { return m_y; } private: int m_x; int m_y; }; class Circle { public: void setR(int r) { m_r = r; } int getR() { return m_r; } void setcenter(Point center) { m_center = center; } Point getcenter() { return m_center; } private: int m_r; Point m_center; }; void C_and_P(Circle &c, Point &p) { int distance = (c.getcenter().getX() - p.getX())*(c.getcenter().getX() - p.getX()) + (c.getcenter().getY() - p.getY())* (c.getcenter().getY() - p.getY()); int doubleR = c.getR()*c.getR(); if (distance==doubleR) { cout << "點(diǎn)在圓上" << endl; } else if (distance<doubleR) { cout << "點(diǎn)在圓內(nèi)" << endl; } else { cout << "點(diǎn)在圓外" << endl; } } int main() { Point p; p.setX(10); p.setY(30); Circle c; c.setR(10); Point center; center.setX(26); center.setY(43); C_and_P(c, p); system("pause"); return 0; }
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
wchar_t,char,string,wstring之間的相互轉(zhuǎn)換
以下是對(duì)wchar_t,char,string,wstring之間的相互轉(zhuǎn)換進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助2013-09-09詳解如何實(shí)現(xiàn)C++虛函數(shù)調(diào)用匯編代碼
多態(tài)是C++中最重要的特性之一,對(duì)虛函數(shù)的調(diào)用在C++代碼中是隨處可見的,本篇文章我們?cè)敿?xì)探討一下,感興趣的朋友快來看看吧2021-11-11C/C++獲取主機(jī)網(wǎng)卡MAC地址的三方法
MAC地址(Media Access Control address),又稱為物理地址或硬件地址,是網(wǎng)絡(luò)適配器(網(wǎng)卡)在制造時(shí)被分配的全球唯一的48位地址,通過獲取MAC地址可以判斷當(dāng)前主機(jī)的唯一性可以與IP地址綁定并實(shí)現(xiàn)網(wǎng)絡(luò)準(zhǔn)入控制,本文給大家介紹了使用C/C++獲取主機(jī)網(wǎng)卡MAC地址的三方法2023-11-11opencv?C++模板匹配的簡(jiǎn)單實(shí)現(xiàn)
這篇文章主要介紹了opencv?C++模板匹配的簡(jiǎn)單實(shí)現(xiàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02學(xué)生成績(jī)管理系統(tǒng)C語(yǔ)言代碼實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言代碼實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01C語(yǔ)言實(shí)現(xiàn)掃雷OvO(完整代碼)
相信大家都玩過掃雷游戲,因?yàn)樗?jīng)典了,今天我們用C語(yǔ)言來模擬實(shí)現(xiàn)掃雷游戲,結(jié)合示例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2022-04-04