【C++面向对象】12. 数据封装*

文章目录

  • 【 1. private 关键字实现数据封装 】
  • 【 2. 实例 】
  • 【 3. 设计策略 】

  • 封装是面向对象编程中的把数据和操作数据的函数绑定在一起的一个概念,这样能避免受到外界的干扰和误用,从而确保了安全。数据封装引申出了另一个重要的 OOP面向对象 概念,即 数据隐藏
  • 数据封装 是一种把数据和操作数据的函数捆绑在一起的机制,数据抽象 是一种仅向用户暴露接口而把具体的实现细节隐藏起来的机制。

【 1. private 关键字实现数据封装 】

  • C++ 通过创建类来支持封装和数据隐藏(public、protected、private)。我们已经知道,类包含私有成员(private)、保护成员(protected)和公有成员(public)成员。 private 关键字是实现封装的一种方式,默认情况下,在类中定义的所有项目都是私有的
  • 实例:下面代码中,变量 length、breadth 和 height 都是私有的(private)。这意味着它们只能被 Box 类中的其他成员访问,而不能被程序中其他部分访问。
class Box
{
   public:
      double getVolume(void)
      {
         return length * breadth * height;
      }
   private:
      double length;      // 长度
      double breadth;     // 宽度
      double height;      // 高度
};
  • 把一个类定义为另一个类的友元类,会暴露实现细节,从而降低了封装性。理想的做法是 尽可能 地对外隐藏每个类的实现细节。

【 2. 实例 】

  • C++ 程序中,任何带有公有和私有成员的类都可以作为数据封装和数据抽象的实例。
  • 如下所示,把数字相加,并返回总和。公有成员 addNum 和 getTotal 是对外的接口,用户需要知道它们以便使用类。私有成员 total 是对外隐藏的,用户不需要了解它,但它又是类能正常工作所必需的。
#include 
using namespace std;

class Adder{
   public:
      // 构造函数
      Adder(int i = 0)
      {
        total = i;
      }
      // 对外的接口
      void addNum(int number)
      {
          total += number;
      }
      // 对外的接口
      int getTotal()
      {
          return total;
      };
   private:
      // 对外隐藏的数据
      int total;
};
int main( )
{
   Adder a;

   a.addNum(10);
   a.addNum(20);
   a.addNum(30);

   cout << "Total " << a.getTotal() <<endl;
   return 0;
}

【 3. 设计策略 】

  • 我们 通常都会设置类成员状态为私有(private),除非我们真的需要将其暴露,这样才能保证良好的封装性 。这通常应用于数据成员,但它同样适用于所有成员,包括虚函数。

你可能感兴趣的:(C++,c++,开发语言)