4、類和物件—封裝
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++中struct
和class
唯一的區別就在於:預設的訪問許可權不同
區別:
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;
}
相關文章
- C#關於JArray和JObject封裝JSON物件C#JARObject封裝JSON物件
- JS物件之封裝(二)JS物件封裝
- Hyperf 獲取 Swoole\Server 的物件以及函式類的封裝Server物件函式封裝
- 封裝Redis工具類封裝Redis
- 封裝Date工具類封裝
- 物件,包裝類物件
- 查詢條件封裝物件封裝物件
- 物件導向:封裝,多型物件封裝多型
- 物件導向之封裝(Java)物件封裝Java
- jwt是什麼?php jwt類封裝和使用JWTPHP封裝
- 類和物件物件
- 一、類的封裝性封裝
- 自用驗證類封裝封裝
- c#封裝DBHelper類C#封裝
- 全網最適合入門的物件導向程式設計教程:06 類和物件的Python實現-自定義類的資料封裝物件程式設計Python封裝
- 20. 物件導向之封裝物件封裝
- 物件導向08:封裝詳解物件封裝
- JavaScript物件導向之一(封裝)JavaScript物件封裝
- 類和物件案例物件
- 【Kotlin】類和物件Kotlin物件
- 類和物件(中)物件
- Java 類和物件Java物件
- Java 物件和類Java物件
- Scala 類和物件物件
- Java物件和類Java物件
- 十五、類與封裝的概念封裝
- Android之Activity基類封裝Android封裝
- c# Lambda操作類封裝C#封裝
- 如何講清楚 Java 物件導向的問題與知識?(類與物件,封裝,繼承,多型,介面,內部類...)Java物件封裝繼承多型
- Java類的設計和封裝及類成員的訪問控制Java封裝
- urllib.request.Request物件封裝請求物件封裝
- Dozer封裝物件或List的轉換封裝物件
- 命令模式-將請求封裝成物件模式封裝物件
- 物件導向 -- 三大特性之封裝物件封裝
- 原生es5封裝的Promise物件封裝Promise物件
- 封裝和多型封裝多型
- 封裝和繼承封裝繼承
- 靜態庫封裝之ComDir類封裝