封装:成员变量私有化,提供公共的getter和setter给外界去访问成员变量
比如说
#include<iostream>
using namespace std;
int main() {
struct Person {
/*private:*/
int m_age;
//public:
//void setAge( int age) {
//if (age <= 0) {
//m_age = 1;
//}
//else
//{
//m_age = age;
//}
//
//}
//int getAge() {
//return m_age;
//}
};
Person person;
person.m_age = -6;
//person.m_age = 22;
//int age = -20;
//person.setAge(age);
//cout << "age= " << person.getAge() << endl;
cout << "age= " << person.m_age << endl;
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/67d5514634b2f1f5fdb638e74aa69baf.png)
这段例子中,此时成员变量是公开的,阻止不了别人给它赋一些了乱七八糟的值,这里举得例子是年龄,age应>=0这是-6就不合理了。
我们可以用private将成员变量私有化外界int main()中就不可以直接更改age的值,
![](https://i-blog.csdnimg.cn/blog_migrate/f738f5b0496b4cbb13600f09d472f116.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4f9c1df350bd64ba190c03970d6c3c18.png)
可以转而提供一个公共的set方法get方法
![](https://i-blog.csdnimg.cn/blog_migrate/1890c19f2573327f3e93dc3262ea0077.png)
将外面传进来的参数age进行过滤,再赋值给m_age即可从而实现一些过滤操作
![](https://i-blog.csdnimg.cn/blog_migrate/0c7304f208179cbf6c7de4f900bd68bb.png)
#include<iostream>
using namespace std;
int main() {
struct Person {
private:
int m_age;
public:
void setAge(int age) {
if (age <= 0) {
m_age = 1;
}
else
{
m_age = age;
}
}
int getAge() {
return m_age;
}
};
Person person;
//person.m_age = 22;
int age = -20;
person.setAge(age);
cout << "age= " << person.getAge() << endl;
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/0a4b99c0df76b6df533b4c4ad7abd2e2.png)
即调用set方法来使用变量,调用get方法来访问变量,达到函数封装效果。