類和對象
C++面向對象的三大特性為:封裝、繼承、多態
C++認為萬事萬物都皆為對象,對象上有其屬性和行為
封裝的意義
封裝是C++面向對象三大特性之一
封裝的意義:
- 將屬性和行為作為一個整體,表現生活中的事物
- 將屬性和行為加以權限控制
語法:class 類名{訪問權限:屬性/行為;
#include<iostream>
#include<cmath>
using namespace std;
#define PI 3.14
class Circle {
public:
int m_r;
double calculateZC() {
return 2 * PI * m_r;
}
};
int main()
{
Circle c1;
c1.m_r = 5;
cout << c1.calculateZC();
return 0;
}
訪問權限
|
權限
|
行為
|
|
公共權限
|
類內可以訪問,類外可以訪問
|
|
保護權限
|
類內可以訪問,類外不可以訪問
|
|
私有權限
|
類內可以訪問,類外不可以訪問
|
|
保護權限和私有權限的區別是,保護權限的屬性,子類可以訪問,私有權限的屬性,子類不能訪問。
|
struct和class的區別
在C++中struct和class唯一的區別就在於默認的訪問權限不同
區別:
- struct默認權限為公共
- class默認權限為私有
#include<iostream>
#include<cmath>
#include<string>
using namespace std;
#define PI 3.14
class C1 {
int m_A = 10;
};
struct C2 {
int m_A = 10;
};
int main()
{
C1 c1;
// c1.m_A = 20; 報錯,不可訪問
C2 c2;
c2.m_A = 20;
return 0;
}
成員屬性設置為私有
優點1:將所有成員屬性設置為私有,可以自已控制讀寫權限
優點2:對於寫權限,我們可以檢測數據的有效性
#include<iostream>
#include<string>
using namespace std;
class Person {
private:
string name;
int age = 18;
string idol;
public:
void setname(string name) {
if (name.length() < 7 && name.length() > 1) {
this->name = name;
}
else {
cout << "名字長度不符合標準" << endl;
}
}
string getname() {
return name;
}
int getage() {
return age;
}
void setidol(string idol) {
this->idol = idol;
}
};
int main()
{
Person p1;
p1.setname("張三四五");
p1.setname("張三");
cout << p1.getname() << endl;
cout << p1.getage() << endl;
p1.setidol("小明");
string s = "張三";
return 0;
}
將所有成員變量設置為私有,我們可以人為的選擇暴露一些接口,讓用户可以讀或寫某些成員變量。
並且對於寫可以進行校驗,例如用户通過接口傳入名字時,我們可以檢測名字是否過長或過短。符合條件才會執行寫操作。