1. 封装的意义
封装是C++面向对象的三大特性之一。
封装的意义:
(1)将属性和行为作为一个整体,表现生活中的事物;
(2)将属性和行为加以权限控制(public公共权限,protected保护权限,private私有权限)
语法:
class 类名{ 访问权限: 属性 / 行为};
示例1: 设计一个圆类,求圆的周长
示例代码:
#include <iostream>
using namespace std;
//圆周率
const double PI = 3.14;
//设计一个圆类,求圆的周长
// 圆求周长的公式:2 * PI * R
// class 代表设计一个类,类后面紧跟着的就是类名称
// 类中的属性和行为统一称为成员
// 属性,成员属性,成员变量
// 行为,成员函数,成员方法
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;
return 0;
}
示例2: 权限控制
#include <iostream>
using namespace std;
//访问权限有三种
//公共权限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 p1;
p1.m_Name = "李四";
// p1.m_Car = "奔驰"; //保护权限内容,在类外访问不到
// p1.m_Password = "22222"; //私有权限内容,在类外访问不到
p1.func();
return 0;
}
2. struct和class的区别
在C++中struct和class唯一的区别就在于默认的访问权限不同
区别:
- struct默认权限为公共
- class默认权限为私有
#include <iostream>
using namespace std;
class C1
{
int m_A; //默认权限是公共
};
struct C2
{
int m_A; //默认权限是公共
};
int main()
{
//struct默认权限是公共 public,class默认权限是私有 private
C1 c1;
//c1.m_A = 100; //在class里默认权限为私有,因此类外不可以访问
C2 c2;
c2.m_A = 100; //在struct默认的权限为公共,因此可以访问
return 0;
}
3. 成员属性设置为私有
优点:
- 将所有成员属性设置为私有,可以自己控制读写权限;
- 对于写权限,我们可以检测数据的有效性;
#include <iostream>
#include <string>
using namespace std;
//成员属性设置为私有
//1. 可以自己控制读写权限
//2. 对于写,可以检测数据的有效性
//设计人类
class Person
{
public:
//设置姓名
void setName(string name)
{
m_Name = name;
}
//获取姓名
string getName()
{
return m_Name;
}
//设置年龄
void setAge(int age)
{
if (age < 0 || age > 160)
{
cout << "年龄不太对吧?" << endl;
return;
}
m_Age = age;
}
//获取年龄
int getAge()
{
return m_Age;
}
//设置情人
void setLover(string m_Lover)
{
m_Lover = "苍井";
}
private:
string m_Name; // 姓名,可读可写
int m_Age; //age,可读
string m_Lover; //情人,可写
};
int main()
{
Person p;
p.setName("张三");
p.setAge(18);
p.setLover("苍井");
cout << p.getName() << endl;
cout << p.getAge() << endl;
return 0;
}