一、封装的意义
- 将属性和行为作为一个整体,表现生活中的事物
- 将属性和行为加以权限控制
1.1 设计类时,属性和行为写在一起,表现事物
语法:class 类名{ 访问权限: 属性/行为 };
类中的属性和行为统一称为成员,属性也称为成员属性或成员变量,行为也成为成员函数或成员方法;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| #include<iostream> using namespace std;
const double PI = 3.1415926;
class Circle{ public: int r; double calcuPerimeter(){ return 2 * PI * r; } };
int main(){
Circle c1; c1.r = 10; cout << "Perimeter is " << c1.calcuPerimeter() << endl;
system("Pause"); return 0; }
|
1.2 类在设计时,可以把属性和行为放在不同的权限下加以控制
访问权限有三种
- public:公共权限,类内可以访问,类外可以访问
- protected:保护权限,类内可以访问,类外不可以访问
- private:私有权限,类内可以访问,类外不可以访问
保护权限和私有权限区别主要在继承方面,子类可以访问父类的保护权限,而私有权限不可访问
二、struct和class的区别
在C++种struct和class的唯一区别在于默认的访问权限不同
- struct:默认权限为公有
- class:默认权限为私有
尽管结构体可以包含成员函数,但它们很少这样做。所以,通常情况下,结构体声明只会声明成员变量。结构体声明通常不包括public或private的访问修饰符。
三、成员属性设置为私有
- 将所有成员属性设置为私有,可以自己控制读写权限
- 对于写权限,我们可以检测数据的有效性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| 例: #include<iostream> #include<string> using namespace std;
class Person{ public: void setName(string name){ m_Name = name; } string getName(){ return m_Name; }
void setGender(string gender){ if(gender == "Male" or gender == "Female"){ m_Gender = gender; } else{ cout << "Wrong Gender!" << endl; m_Gender = "Male"; return; } } string getGender(){ return m_Gender; }
void setAge(int age){ m_Age = age; }
private: string m_Name; string m_Gender; int m_Age;
};
int main(){
Person p;
p.setName("Huffie"); cout << "Name:\t" << p.getName() << endl;
p.setGender("Male"); cout << "Gender:\t" << p.getGender() << endl;
p.setAge(21);
system("Pause"); return 0; }
|
参考:黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难
链接:https://www.bilibili.com/video/BV1et411b73Z