目录
封装
1. 封装的意义
封装是c++面向对象三大特性之一
封装的意义:
1)将属性和行为作为一个整体,表现生活中的事物
2)将属性和行为加以权限控制
封装意义一:
在设计类的时候,属性和行为写在一起,表现事物
语法: class 类名{ 访问权限: 属性 / 行为 };
示例:设计一个圆类,求圆的周长
示例代码:
#include <iostream>
using namespace std;
const double PI = 3.14;
//class代表设计一个类,类后面紧跟着的就是类名称
class yuan {
//访问权限
public: //公共权限
//属性
int yuan_r; //半径
//行为
double zhouChang() //周长
{
return 2 * PI * yuan_r;
}
};
int main()
{
//通过圆类创建具体的圆
yuan yuan1;
//给圆对象的属性进行赋值
yuan1.yuan_r = 10;
cout << "圆的周长为:" << yuan1.zhouChang() << endl;
system("pause");
return 0;
}
封装意义二:
类在设计时,可以把属性和行为放在不同的权限下,加以控制
访问权限有三种
1)public 公共权限 类内可以访问,类外可以访问
2)protected 保护权限 类内可以访问,类外不可以访问
3)private 私有权限 类内可以访问,类外不可以访问
struct和class区别
在c++中struct和class唯一的区别就在于默认的访问权限不同
区别:
1)struct默认权限为公共
2)class默认权限为私有
将成员属性设置为私有
优点1:将所有成员属性设置为私有,可以自己控制读写权限
优点2:对于写权限,我们可以检测数据的有效性(可以设置一个规则,只有符合这个规则才可以写) 示例:
#include <iostream>
using namespace std;
//将成员属性设置为私有
//优点1:将所有成员属性设置为私有,可以自己控制读写权限
//优点2:对于写权限,我们可以检测数据的有效性
//设计人类
class Preson {
public:
//写姓名
void setName(string name)
{
m_name = name;
}
//读姓名
string getName()
{
return m_name;
}
//写年龄 但必须在0~100之间
void setAge(int age)
{
if (age >= 0 && age <= 100) {
m_age = age;
}
else {
cout << "这不是地球人该有的年龄" << endl;
return ;
}
}
//读年龄
int getAge()
{
return m_age;
}
//读学校
string getSchool()
{
m_school = "西京";
return m_school;
}
private:
//姓名 可读可写
string m_name;
//年龄 可读可写 如果想修改(年龄的范围必须是0~100之间)
int m_age = 0;
//学校 可读
string m_school;
};
int main()
{
Preson P1;
//姓名 可读可写权限
P1.setName("张三"); //写姓名,不报错
cout << "姓名:" << P1.getName() << endl; //读姓名,不报错
//年龄 可读可写 只有在0~100之间才可以写
P1.setAge(180); //写年龄,不报错
cout << "年龄:" << P1.getAge() << endl; //读年龄,不报错
//学校 可读不可写权限
//P1.m_school = "清华"; //写学校,报错,无权限不可访问
cout << "学校不可写" << endl;
cout << "学校:" << P1.getSchool() << endl; //读学校,不报错
system("pause");
return 0;
}
注:学习黑马视频做的笔记