文章内容转载自黑马程序员C++核心编程讲义,如有侵权,请联系作者删除
4.1 封装
4.1.1 封装的意义
封装是C++面向对象三大特性之一
封装的意义:
- 将属性和行为作为一个整体,表现生活中的事物
- 将属性和行为加以权限控制
封装意义一:
在设计类的时候,属性和行为写在一起,表现事物
语法:
class 类名{ 访问权限: 属性 / 行为 };
示例1:设计一个圆类,求圆的周长
示例代码:
const double PI = 3.14;
class Circle { public:
int m_r;
double calculateZC() { return 2 * PI * m_r; } };
int main() {
Circle c1; c1.m_r = 10;
cout << "圆的周长为: " << c1.calculateZC() << endl;
system("pause");
return 0; }
|
示例2:设计一个学生类,属性有姓名和学号,可以给姓名和学号赋值,可以显示学生的姓名和学号
示例2代码:
class Student { public: void setName(string name) { m_name = name; } void setID(int id) { m_id = id; }
void showStudent() { cout << "name:" << m_name << " ID:" << m_id << endl; } public: string m_name; int m_id; };
int main() {
Student stu; stu.setName("德玛西亚"); stu.setID(250); stu.showStudent();
system("pause");
return 0; }
|
封装意义二:
类在设计时,可以把属性和行为放在不同的权限下,加以控制
访问权限有三种:
- public 公共权限
- protected 保护权限
- 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 p; p.m_Name = "李四"; p.func()
system("pause");
return 0; }
|
4.1.2 struct和class区别
在C++中 struct和class唯一的区别就在于
默认的访问权限不同
区别:
- struct 默认权限为公共
- class 默认权限为私有
class C1 { int m_A; };
struct C2 { int m_A; };
int main() {
C1 c1; c1.m_A = 10;
C2 c2; c2.m_A = 10;
system("pause");
return 0; }
|
4.1.3 成员属性设置为私有
优点1:将所有成员属性设置为私有,可以自己控制读写权限
优点2:对于写权限,我们可以检测数据的有效性
示例:
class Person { public:
void setName(string name) { m_Name = name; } string getName() { return m_Name; }
int getAge() { return m_Age; } void setAge(int age) { if (age < 0 || age > 150) { m_Age = 0; cout << "你个老妖精!" << endl; return; } m_Age = 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;
p.setAge(50); cout << "年龄: " << p.getAge() << endl;
p.setLover("苍井");
system("pause");
return 0; }
|