【C++ 04】類和對象-封裝

目錄

1 封裝的意義

2 struct和class的區別

3 將成員屬性設置爲私有


C++ 面向對象的三大特性:封裝、繼承、多態

C++認爲萬物皆爲對象,對象上有其屬性和行爲

1 封裝的意義

封裝是C++面向對象的三大特性之一;

封裝的意義:

  • 將屬性和行爲作爲一個整體,表現生活中的事務
  • 將屬性和行爲加以權限控制;

封裝意義一:在設計類的時候,將屬性和行爲寫在一起,表現事務;

語法:class 類名{ 訪問權限 :屬性/行爲};

#include<iostream>
using namespace std;
//pi
const double PI = 3.14;
// 設計一個圓類,求⚪的周長
class Circle
{
	//訪問權限
	//公共權限
public:
	//屬性
	//半徑
	int m_r;
	//行爲
	double  calculateZC()
	{
		return 2 * PI * m_r;
	}
};

int main()
{
	//通過⚪類可以創建具體對象;
	Circle cl;
	cl.m_r = 10;

	cout << "圓的周長 = " << cl.calculateZC() << endl;
	system("pause");
	return 0;
}
//student 設計一個學生類,屬性有姓名和學號
class student {
public: 

	//類中的屬性和行爲統稱爲成員
	//屬性 成員屬性 成員變量
	//行爲 成員函數 成員方法

	//屬性
	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()
{
	student st;
	//st.m_Name = "張三";
	//st.m_Id= 12344;
	st.setName("張三");
	st.setId(123456);
	st.showstudent();

	system("pause");
	return 0;
}

封裝意義二:

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

訪問權限有三種:

1 public 公共權限

2 protected 保護權限

3 private 私有權限

//訪問權限
//三種
//公共權限 public 成員類內可以訪問 類外也可以訪問
//保護權限 protected 類內可以訪問,類外不可以訪問 兒子可以訪問父親中保護的內容
//私有權限 private 成員 類內可以訪問,類外不可以訪問  兒子不可以訪問父親中私有內容

class Person {
	//公共權限
public:
	string m_Name;
protected:
	string m_Car;
private:
	int m_Password;

public:
	void func(string car)
	{
		m_Name = "張三";
		m_Car = "car";
		m_Password = 123456;
	}

};
int main()
{
	Person st;
	//st.m_Name = "張三";
	//st.m_Id= 12344;
	st.m_Name = "李四";
	st.func("卡車");
	system("pause");
	return 0;
}

2 struct和class的區別

struct和class唯一的區別在於默認的訪問權限不同

struct 默認權限爲公共;

class默認權限爲私有;

//struct和class的區別
class C1 {
	int m_A;//默認權限爲私有
};

struct C2 {
	int m_A;//默認權限爲公共
};
int main()
{
	Person st;
	C1 c1;
	//c1.m_A = 10;
	C2 c2;
	c2.m_A = 10;
	system("pause");
	return 0;
}

3 將成員屬性設置爲私有

優點1:將所有成員屬性設置爲私有,可以自己控制讀寫權限;

優點2:對於寫可以檢測數據的有效性;

//成員屬性設置爲私有

class Personn {
public:
	//寫姓名
	void setName(string name)
	{
		m_Name = name;
	}
	//獲取姓名
	string getName()
	{
		return m_Name;
	}
	int getAge()
	{
		m_Age = 0;
		return m_Age;
	}
	void setLover(string lover)
	{
		m_Lover = lover;
	}
private:
	//可讀可寫
	string m_Name;
	//只讀
	int m_Age;
	//只寫
	string m_Lover;
};
int main()
{
	Personn one;
	one.setName("zhangsan");
	cout << "姓名: " << one.getName() << endl;
	cout << "年齡: " << one.getAge() << endl;
	one.setLover = "lisi";
	system("pause");
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章