将数据和方法封装到一个类中 , 是封装最基础的概念 ;
类的封装 最基本的功能 就是将 若干数据 和 若干方法 , 封装到一个类中 , 这些数据在内存中以一个整体的形式进行运作 ;
封装 Encapsulation : 将 数据 和 操作 封装在类中 , 可以将 类 内部的 实现细节 隐藏 , 只暴露有限的 接口 与外部进行交互 , 从而达到保护 类 对象的 内部状态 不被外部随意修改 ;
将 现实世界 中 存在的 客观事物 封装成 抽象 的 类 , 类 中 包含了 数据 和 操作 ,
在下面的代码中 , 定义了一个 Circle 类对象 , 其中 封装了 2 个成员属性 ;
// 定义属性成员 , 圆的半径
double m_r;
// 定义属性成员 , 圆的面积
double m_s;
3 个成员方法 ;
定义该 Circle 类对象 circle , 则借助 circle 对象 , 可以直接访问其中的 2 个成员属性 和 3 个成员 方法 ;
// 获取半径
double getR()
{
return m_r;
}
// 设置半径
void setR(double r)
{
m_r = r;
}
// 获取面积
double getS()
{
m_s = 3.14 * m_r * m_r;
return m_s;
}
使用 类 对象 作为函数参数时 , 分别讨论下面三种情况 ;
// 使用 类对象指针作为参数
void fun1(Circle* circle)
{
cout << "fun1(Circle* circle) : " << circle->getS() << endl;
}
Circle circle;
// 传递指针必须使用取地址符取地址
fun1(&circle);
// 使用 类对象引用作为参数
void fun2(Circle& circle)
{
cout << "fun2(Circle& circle) : " << circle.getS() << endl;
}
Circle circle;
// 传递引用直接传递即可
fun2(circle);
// 直接使用 类对象作为参数
void fun3(Circle circle)
{
cout << "fun3(Circle circle) : " << circle.getS() << endl;
}
Circle circle;
// 传递对象直接传递 , 需要拷贝整个对象效率很低
fun3(circle);
完整代码示例 :
// 包含 C++ 头文件
#include "iostream"
// 使用 std 标准命名空间
// 该命名空间中 , 定义了很多标准定义
using namespace std;
// 定义圆形类
class Circle
{
public:
// 定义属性成员 , 圆的半径
double m_r;
// 定义属性成员 , 圆的面积
double m_s;
public:
// 获取半径
double getR()
{
return m_r;
}
// 设置半径
void setR(double r)
{
m_r = r;
}
// 获取面积
double getS()
{
m_s = 3.14 * m_r * m_r;
return m_s;
}
};
// 使用 类对象指针作为参数
void fun1(Circle* circle)
{
cout << "fun1(Circle* circle) : " << circle->getS() << endl;
}
// 使用 类对象引用作为参数
void fun2(Circle& circle)
{
cout << "fun2(Circle& circle) : " << circle.getS() << endl;
}
// 直接使用 类对象作为参数
void fun3(Circle circle)
{
cout << "fun3(Circle circle) : " << circle.getS() << endl;
}
int main()
{
Circle circle;
circle.setR(10);
cout << "圆面积为 : " << circle.getS() << endl;
// 传递指针必须使用取地址符取地址
fun1(&circle);
// 传递引用直接传递即可
fun2(circle);
// 传递对象直接传递 , 需要拷贝整个对象效率很低
fun3(circle);
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
}
执行结果 :
圆面积为 : 314
fun1(Circle* circle) : 314
fun2(Circle& circle) : 314
fun3(Circle circle) : 314
Press any key to continue . . .