C ++中的数据封装

所有C ++程序都由以下两个基本元素组成 :

  • 程序语句(代码) : 这是执行操作的程序的一部分,它们被称为函数.

  • 程序数据 : 数据是受程序功能影响的程序信息.

封装是一种面向对象的编程概念,它将操纵数据的数据和功能,保证两者免受外部干扰和误用.数据封装导致了重要的OOP概念数据隐藏.

数据封装是一种捆绑数据和功能的机制使用它们和数据抽象是一种只暴露接口并隐藏用户实现细节的机制.

C ++支持封装和数据隐藏的属性通过创建用户定义的类型,称为.我们已经研究过一个类可以包含 private,protected public 成员.默认情况下,类中定义的所有项都是私有的.例如 :

class Box {
   public:
      double getVolume(void) {
         return length * breadth * height;
      }

   private:
      double length;      // Length of a box
      double breadth;     // Breadth of a box
      double height;      // Height of a box
};

变量length,widthth和height是 private .这意味着它们只能由Box类的其他成员访问,而不能由程序的任何其他成员访问.这是实现封装的一种方式.

要创建类 public 的部分(即,可以访问程序的其他部分),必须在之后声明它们公开关键字.公共说明符之后定义的所有变量或函数都可由程序中的所有其他函数访问.

使一个类成为另一个类的朋友会暴露实现细节并减少封装.理想的做法是尽可能多地保留每个类的所有细节.

数据封装示例

任何C ++程序,其中实现具有公共和私有成员的类是数据封装和数据抽象的示例.请考虑以下示例 :

#include <iostream>
using namespace std;

class Adder {
   public:
      // constructor
      Adder(int i = 0) {
         total = i;
      }
      
      // interface to outside world
      void addNum(int number) {
         total += number;
      }
      
      // interface to outside world
      int getTotal() {
         return total;
      };
   
   private:
      // hidden data from outside world
      int total;
};

int main() {
   Adder a;
   
   a.addNum(10);
   a.addNum(20);
   a.addNum(30);

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

编译并执行上述代码时,会产生以下结果 :

Total 60

上面的类将数字加在一起,并返回总和.公共成员 addNum getTotal 是外部世界的接口,用户需要知道它们才能使用该类.私人会员总计是对外界隐藏的东西,但是课程需要正常运作.

设计策略

我们大多数人都学会了默认将类成员设为私有,除非我们真的需要公开它们.这很好封装.

这最常用于数据成员,但它同样适用于所有成员,包括虚拟功能.