4、類和物件—封裝

楠楠喃發表於2020-11-14

C++物件導向的三大特性為:封裝、繼承、多型

C++認為萬事萬物皆為物件,物件上有其屬性和行為

具有相同性質的物件,我們可以抽象稱為

封裝

封裝的意義

封裝是C++物件導向三大特性之一
封裝的意義
1、將屬性和行為作為一個整體,表現生活中的事物
2、將屬性和行為加以許可權控制
封裝的意義一
在設計類的時候,屬性和行為寫在一起,表現事物
語法class 類名{ 訪問許可權: 屬性 / 行為 };

示例1:設計一個圓類,求圓的周長

 //設計一個圓類,求圓的周長

const double PI = 3.14;

//class代表設計一個類,類後面緊跟著的就是類名稱
class Circle
{
	//訪問許可權
	//公共許可權
public:
	//類中的屬性和行為 我們統一稱為:成員
	//屬性   成員屬性   成員變數
	//半徑   成員函式   成員方法
	int m_r;

	//行為
	//獲取圓的周長
	double calculateZC()
	{
		return 2 * PI * m_r;
	}
};

int main08()
{
	//通過圓類 建立具體的圓(物件)
	Circle cl;
	//給圓物件 的屬性進行賦值
	cl.m_r = 10;

	//2 * PI * 10 =62.8
	cout << "圓的周長為:" << cl.calculateZC() << endl;

	return 0;
}

封裝的意義二
類在設計時,可以把屬性和行為放在不同的許可權下,加以控制
訪問許可權有三種:
1、public——公共許可權
成員:類內可以訪問,類外可以訪問
2、protected——保護許可權
成員:類內可以訪問,類外不可以訪問
(兒子可以訪問父親的保護內容)
3、private——私有許可權
成員:類內可以訪問,類外不可以訪問
(兒子不可以訪問父親的保護內容)

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 = "賓士";//保護許可權內容,在類外訪問不到。
     //p1.m_Password = 123;//私有許可權內容,在類外訪問不到
     //函式和變數同理
      
      return 0;
}

struct和class區別

在C++中structclass唯一的區別就在於:預設的訪問許可權不同
區別:
1、struct預設許可權為公共
2、class預設許可權為私有

成員屬性設定為私有

優點1:將所有成員屬性設定為私有,可以自己控制讀寫許可權
優點2:對於寫許可權,我們可以檢測資料的有效性

優點1:

#include<iostream>
using namespace std;
#include<string>

class Person
{
public://設定private中成員的讀寫訪問
	//設定姓名
	void setName(string name)
	{
		m_Name = name;
	}
	//獲取姓名
	string getName()
	{
		return m_Name;
	}

	//獲取年齡
	int getAge()
	{
		m_Age = 0;//初始化為0歲
		return m_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;
	cout << "年齡為:" << p.getAge() << endl;

	//設定情人為蒼井女生
	p.setLover("蒼井");

	return 0;
}

優點2:

class Person
{
public:
    //獲取年齡 可讀可寫,如果想要修改(年齡的範圍必須是0~150之間)
  	int getAge()
	{
		//m_Age = 0;//初始化為0歲
		return m_Age;
	}

    void setAge(int age)
    {
         if(age < 0 || age > 150)
         {
             m_Age = 0;
             cout<<"你這個老妖精!"<<endl;
             return;
         }
         m_Age = age;
    }
};

int main()
{
    p.setAge(1000);
    cout << "年齡為: " << p.getAge()<< endl;
    return 0;
}
    

相關文章