下面这篇文我来给大家分享C++面向对象三大特性之一(封装)。
一、什么是封装?
分装就是一个类中的私有成员,虽然类外不可以访问,但是我们提供一些公共的接口来间接让其他人访问到,例如一个人的名字我们起好之后就一般不会允许其他人改你的姓名,但是我们可以通过一些方式得到你的姓名,这就是封装。
二、为什么要封装?
1、封装可以保护数据,防止数据被随意篡改。
2、利于后期维护,当我们要修改代码时我们不需要大量的修改代码的片段只需要修改被封装的这段代码,例如:判断文件是否为空的代码,我们每次打开文件时都要用到,如果我们打开了三个文件,就要写三次代码而且后期需要修改时要修改三处,但我们如果封装了该代码就只需要在需要的地方的调用判断文件为空的接口,如果出错了后期要维护我们只需要改接口里的内容而不用修改其他几处,大大提高了维护效率。
三、封装例子
下面我们创建一个Person类, 然后封装一下Person类的属性;
class Person
{
private:
string m_Name;
int m_Age;
public:
//封装姓名
//获取姓名
string getName()
{
return this->m_Name;
}
//设置姓名
void setName(string name)
{
this->m_Name = name;
}
//封装年龄
//获取年龄
int getAge()
{
return this->m_Age;
}
//设置年龄
void setAge(int age)
{
this->m_Age = age;
}
};
分装完成之后我们创建test01函数来测试一下封装是否成功,
void test01()
{
Person p1;
//p1.m_Name="小明";//会报错,不可直接访问了
//p1.m_Age=22;//会报错,不可直接访问了
p1.setName("小明");
p1.setAge(22);
cout << "姓名:" << p1.getName() << endl;
cout << "年龄:" << p1.getAge() << endl;
}
可以发现我们封装完毕后直接访问姓名和年龄是不可以的,但是我们可以通过公共接口来访问我们的属性。
四、下面是全部代码
#include<iostream>
using namespace std;
class Person
{
private:
string m_Name;
int m_Age;
public:
//封装姓名
//获取姓名
string getName()
{
return this->m_Name;
}
//设置姓名
void setName(string name)
{
this->m_Name = name;
}
//封装年龄
//获取年龄
int getAge()
{
return this->m_Age;
}
//设置年龄
void setAge(int age)
{
this->m_Age = age;
}
};
void test01()
{
Person p1;
//p1.m_Name="小明";//会报错,不可直接访问了
//p1.m_Age=22;//会报错,不可直接访问了
p1.setName("小明");
p1.setAge(22);
cout << "姓名:" << p1.getName() << endl;
cout << "年龄:" << p1.getAge() << endl;
}
int main()
{
test01();
system("pause");
return 0;
}
运行结果如下