溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++的封裝方法是什么

發(fā)布時間:2022-02-08 16:31:57 來源:億速云 閱讀:145 作者:iii 欄目:開發(fā)技術

本篇內(nèi)容介紹了“C++的封裝方法是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

    封裝

    c++認為萬事萬物皆為對象,對象上有其屬性和行為

    封裝的意義:

    • 將屬性和行為作為一個整體,表現(xiàn)生活中的事物

    • 將屬性和行為加以權限控制

     封裝意義一:

    在設計類的時候,屬性和行為寫在一起,表現(xiàn)事物

    語法:

    class  類名{  訪問權限:屬性 / 行為};

    屬性和行為作為整體

    #include<iostream>
    using namespace std;
    //圓周率
    const double PI = 3.14;
    //設計一個圓類,求圓的周長
    //圓求周長的公式:2*PI*半徑
    class Circle {
    	//訪問權限
    	//公共權限
    public:
     		//屬性
    		//半徑
     		int m_r;
    	//行為
    	//獲取圓的周長
    		double calculateZC() {
    			return 2 * PI * m_r;
    		}
    };
     int main() {
    	//通過圓類,創(chuàng)建具體的圓(對象)
    	//實例化  (通過一個類 創(chuàng)建一個對象的過程)
    	Circle c1;
    	//給圓對象的屬性進行賦值
    	c1.m_r = 10;
    	//2 * PI * m_r = 62.8;
    	cout << "圓的周長為:" << c1.calculateZC () << endl;
    	system("pause");
    	return 0;
    }

     實例&mdash;設計學生類

    #include<iostream>
    using namespace std;
    //#include<string>
    //設計一個學生類,屬性有姓名和學號,可以給姓名和學號賦值,可以顯示學生的姓名和學號
    //設計學生類
    class Student {
    public://公共權限
    	//類中的屬性和行為 我們統(tǒng)一稱為 成員
    	//屬性 成員屬性 成員變量
    	//行為 成員函數(shù) 成員方法
     	//屬性
    	string m_Name;//姓名
    	int m_Id;//學號
    	//行為
    	//顯示姓名和學號
    	void showStudent() {
    		cout << "姓名:" << m_Name << "  學號:"<<m_Id << endl;
    	}
    	//給姓名賦值
    	void setName(string name) {
    		m_Name = name;
    	}
    	void setId(int Id) {
    		m_Id = Id;
    	}
    };
    int main() {
    	//創(chuàng)建一個具體的學生  實例化對象
    	Student s1;
    	//給s1對象進行屬性賦值操作
    	//s1.m_Name = "張三";
    	s1.setName("張三");
    	//s1.m_Id = 1;
    	s1.setId(1);
    	s1.showStudent();
     	Student s2;
    	s2.m_Name = "李四";
    	s2.m_Id = 2;
    	s2.showStudent();
    	system("pause");
    	return 0;
    }

    訪問權限

    封裝意義二:

    類在設計時,可以把屬性和行為放在不同的權限下,加以控制

    權限訪問有三類:

    • public         公共權限

    • protected    保護權限

    • private        私有權限

    #include<iostream>
    using namespace std;
    //訪問權限
    //三種
    //公共權限 public        成員  類內(nèi)可以訪問  類外也能訪問
    //保護權限 protected     成員  類內(nèi)可以訪問  類外不可以訪問 兒子可以訪問到父親中的保護內(nèi)容
    //私有權限 private		 成員  類內(nèi)可以訪問  類外不可以訪問 兒子不可以訪問到父親的私有內(nèi)容
    class Person {
    public:
    	//公共權限
    	string m_Name;//姓名
    protected:
    	//保護權限
    	string m_Car;//汽車
    private:
    	int m_Password;//銀行卡密碼
    public:
    	void func() {
    		m_Name = "張三";
    		m_Car = "拖拉機";
    		m_Password = 123456;
    	}
    };
    int main() {
    	//實例化具體對象
    	Person p1;
    	p1.m_Name = "李四";
    	//p1.m_Car = "奔馳";//保護權限的內(nèi)容,在類外訪問不到
    	//p1.m_Password = 123;//私有權限的內(nèi)容,在類外訪問不到
       	system("pause");
    	return 0;
    }

    class與struct區(qū)別

    在c++中struct和class唯一的區(qū)別就在于默認的訪問權限不同

    區(qū)別:

    • struct默認權限為公共

    • class默認權限為私有

    #include<iostream>
    using namespace std;
    class C1 {
     	int m_A;//默認權限 是私有
    };
    struct C2 {
    	int m_A;//默認權限 是公共
    };
    int main() {
    	//struct和class區(qū)別
    	//struct 默認權限是 公有 public
    	//class  默認權限是 私有 private
    	C1 c1;
    	//c1.m_A = 100;//在class里默認權限 私有,因此類外不可以訪問
     	C2 c2;
    	c2.m_A = 100;//在struct默認的權限為公共,因此可以訪問
    	system("pause");
    	return 0;
    }

    成員屬性私有化

    • 優(yōu)點1:將所有成員屬性設為私有,可以自己控制讀寫權限

    • 優(yōu)點2:對于寫權限,我們可以檢測數(shù)據(jù)的有效性

    #include<iostream>
    using namespace std;
    #include<string>
    //成員屬性設置為私有
    //1.可以自己控制讀寫權限
    //2.可以寫可以檢驗數(shù)據(jù)的有效性
    //設計人類
    class Person {
    public:
    	//設置姓名
    	void setName(string name) {
    		m_Name = name;
    	}
    	//獲取姓名
    	string getName() {
    		return m_Name;
    	}
    	//獲取年齡  只讀
    	int getAge() {
    		//m_Age = 0;//初始化零歲
    		return m_Age;
    	}
    	void setAge(int age) {
    		if (age < 0 || age>150) {
    			m_Age = 0;
    			cout << "你這個老妖精!" << endl;
    			return;
    		}
    		m_Age = age;
    	}
    	//設置情人  只寫
    	void setLover(string lover) {
    		m_Lover = lover;
    	}
     private:
    	//姓名  可讀可寫
    	string m_Name;
    	//年齡  只讀
    	int m_Age;
    	//情人  只寫
    	string m_Lover;
    };
    int main() {
    	Person p;
    	p.setName ( "張三");
    	cout << "姓名為:" <<p.getName() << endl;
    	//p.m_Age = 18;
    	//p.setAge(18);
    	p.setAge(18);
    	cout << "年齡為:" << p.getAge() << endl;
    	//設置情人為蒼井女士
    	p.setLover("蒼井");
    	//cout<<"情人為:"<<p.m_Lover << endl;只寫權限,數(shù)據(jù)不可以訪問到的
     	system("pause");
    	return 0;
    }

    設計立方體類

    #include<iostream>
    using namespace std;
    //立方體類設計
    //1.創(chuàng)建立方體類
    //2.設計屬性
    //3.設計行為 獲取立方體面積和體積
    //4.分別利用全局函數(shù)和成員函數(shù) 判斷兩個立方體是否相等
     class Cube {
    public:
    	//行為
    	// 設置長
    	void setL(int l) {
    		m_L = l;
    	}
    	// 獲取長
    	int getL() {
    		return m_L;
    	}
    	// 設置寬
    	void setW(int w) {
    		m_W =w ;
    	}
    	// 獲取寬
    	int getW() {
    		return m_W;
    	}
    	// 設置高
    	void setH(int h) {
    		m_H = h;
    	}
    	// 獲取高
    	int getH() {
    		return m_H;
    	}
    	// 獲取立方體面積
    	int calculateS() {
    		return 2 * m_L * m_W + 2 * m_L * m_H + 2 * m_W * m_H;
    	}
    	// 獲取立方體體積
    	int calculateV() {
    		return m_L * m_W * m_H;
    	}
    	//利用成員函數(shù)判斷兩個立方體是否相等
    	bool isSameByClass(Cube &c) {
    		if (m_L == c.getL() && m_W == c.getW() && m_H == c.getH()) {
    			return true;
    		}
    		return false;
    	}
    private:
    	//屬性
    	int m_L;//長
    	int m_W;//寬
    	int m_H;//高
    };
    //利用全局函數(shù)來判斷 兩個立方體是否相等
    bool isSame(Cube &c1,Cube &c2) {
    	if (c1.getL() == c2.getL() && c1.getW() == c2.getW() && c1.getH() == c2.getH()) {
    		return true;
    	}
    	return false;
    }
    int main() {
    	//創(chuàng)建立方體對象
    	Cube c1;
    	c1.setL(10);
    	c1.setW(10);
    	c1.setH(10);
    	cout << "c1的面積為:" <<c1.calculateS() << endl;
    	cout << "c1的體積為:" << c1.calculateV() << endl;
    	//創(chuàng)建第二個立方體
    	Cube c2;
    	c2.setL(10);
    	c2.setW(10);
    	c2.setH(10);
     	//利用全局函數(shù)判斷
    	bool ret = isSame(c1,c2);
    	if (ret) {
    		cout << "c1和c2是相等的" << endl;
    	}
    	else {
    		cout << "c1和c2是不相等的" << endl;
    	}
    	//利用成員函數(shù)判斷
    	ret = c1.isSameByClass(c2);
    	if (ret) {
    		cout << "成員函數(shù)判斷的:c1和c2是相等的" << endl;
    	}
    	else {
    		cout << "成員函數(shù)判斷的:c1和c2是不相等的" << endl;
    	}
    	system("pause");
    	return 0;
    }

    “C++的封裝方法是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

    向AI問一下細節(jié)

    免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

    c++
    AI