C++ 中的数据封装
所有 C++ 程序都由以下两个基本元素组成 -
-
程序语句(代码) − 这是程序中执行动作的部分,它们被称为函数。
-
节目数据 − 数据是受程序功能影响的程序信息。
封装是一个面向对象的编程概念,它将数据和操作数据的函数绑定在一起,并确保两者免受外部干扰和误用。数据封装导致了数据隐藏这一重要的OOP概念 .
数据封装 是一种捆绑数据的机制,以及使用它们的函数和数据抽象 是一种只暴露接口而对用户隐藏实现细节的机制。
C++ 通过创建用户定义的类型(称为类)来支持封装和数据隐藏的属性 .我们已经研究过一个类可以包含 private, protected 和公开 成员。默认情况下,类中定义的所有项目都是私有的。例如 -
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 };
变量长度、宽度和高度是私有的 .这意味着它们只能被 Box 类的其他成员访问,而不能被程序的任何其他部分访问。这是实现封装的一种方式。
使类的一部分公开 (即程序的其他部分可以访问),您必须在 public 之后声明它们 关键词。在 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 是与外部世界的接口,用户需要知道它们才能使用该类。私有成员 total 是对外界隐藏的东西,但却是类正常运行所必需的。
设计策略
我们大多数人都学会了默认将类成员设为私有,除非我们真的需要公开它们。这很好封装 .
这最常应用于数据成员,但它同样适用于所有成员,包括虚函数。
C语言