C++ 数据封装

所有的 C++ 程序都有以下两个基本要素:

  • 程序语句(代码):这是程序中执行动作的部分,它们被称为函数。
  • 程序数据:数据是程序的信息,会受到程序函数的影响。

封装是面向对象编程中的把数据和操作数据的函数绑定在一起的一个概念,这样能避免受到外界的干扰和误用,从而确保了安全。数据封装引申出了另一个重要的 OOP 概念,即数据隐藏

数据封装是一种把数据和操作数据的函数捆绑在一起的机制,数据抽象是一种仅向用户暴露接口而把具体的实现细节隐藏起来的机制。

C++ 通过创建来支持封装和数据隐藏(public、protected、private)。我们已经知道,类包含私有成员(private)、保护成员(protected)和公有成员(public)成员。默认情况下,在类中定义的所有项目都是私有的。例如:

class Box
{public:double getVolume(void){return length * breadth * height;}private:double length;      // 长度double breadth;     // 宽度double height;      // 高度
};

变量 length、breadth 和 height 都是私有的(private)。这意味着它们只能被 Box 类中的其他成员访问,而不能被程序中其他部分访问。这是实现封装的一种方式。

为了使类中的成员变成公有的(即,程序中的其他部分也能访问),必须在这些成员前使用 public 关键字进行声明。所有定义在 public 标识符后边的变量或函数可以被程序中所有其他的函数访问。

把一个类定义为另一个类的友元类,会暴露实现细节,从而降低了封装性。理想的做法是尽可能地对外隐藏每个类的实现细节。


数据封装的实例

C++ 程序中,任何带有公有和私有成员的类都可以作为数据封装和数据抽象的实例。请看下面的实例:

实例

#include <iostream>
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;
}

当上面的代码被编译和执行时,它会产生下列结果:

Total 60

上面的类把数字相加,并返回总和。公有成员 addNum 和 getTotal 是对外的接口,用户需要知道它们以便使用类。私有成员 total 是对外隐藏的,用户不需要了解它,但它又是类能正常工作所必需的。

设计策略

通常情况下,我们都会设置类成员状态为私有(private),除非我们真的需要将其暴露,这样才能保证良好的封装性

这通常应用于数据成员,但它同样适用于所有成员,包括虚函数。

面向对象编程(六):数据封装相关推荐

  1. c语言面向对象编程显示,c语言面向对象编程

    场景:C语言面向对象编程(6):配置文件解析 C语言面向对象编程(六):配置文件解析 在实际项目中,经常会把软件的某些选项写入配置文件. Windows 平台上的 INI 文件格式简单易用,本篇文章利 ...

  2. 面向对象编程基本思想

    面向对象编程的数据封装的思想:在类中,把每一个实例的属性封装起来,不同的实例拥有相同的数据类型,但是拥有不同的属性 相关知识点:面试之C/C++.Java与Python的区别 大家加油! 学习链接:h ...

  3. python归一化 增大差异_简学Python第六章__class面向对象编程与异常处理

    Python第六章__class面向对象编程与异常处理 欢迎加入Linux_Python学习群 群号:478616847 目录: 面向对象的程序设计 类和对象 封装 继承与派生 多态与多态性 特性pr ...

  4. Java学习笔记 六、面向对象编程中级部分

    Java学习笔记 六.面向对象编程中级部分 包 包的注意事项和使用细节 访问修饰符 访问修饰符的注意事项和使用细节 面向对象编程三大特征 封装 封装的实现步骤(三步) 继承 继承的细节问题 继承的本质 ...

  5. Python学习六:面向对象编程(上)

    文章目录 前言 一.面向对象编程: 1. oop [object oriented programming] 是一种python的编程思路 2. 解释 3. 面向对象 和面向对象编程 二.类和对象 1 ...

  6. Java基础学习——第六章 面向对象编程(下)

    Java基础学习--第六章 面向对象编程(下) 一.关键词:static 1. static关键字的引入 当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实质上的对象,只有通过new ...

  7. C语言面向对象编程(六):配置文件解析

    在实际项目中,经常会把软件的某些选项写入配置文件. Windows 平台上的 INI 文件格式简单易用,本篇文章利用<C语言面向对象编程(五):单链表实现>中实现的单链表,设计了一个&qu ...

  8. Scala核心编程 第六章—Scala面向对象编程(一)

    佛家有云:一花一世界,一叶一菩提,而我们所学的Java就是一个以面向对象为基础的程序语言,在Java中是万物皆为对象,但是在Scala中万事万物皆为对象,由此引出了Scala面向对象编程,接下来,让我 ...

  9. Java总结六:面向对象编程(上)

    面向对象编程(一) ⭐️类与对象⭐️

最新文章

  1. 硬盘提示RAW的文件找回方法
  2. pyqt改变背景颜色
  3. 【错误记录】反射时调用方法及成员报错 ( 执行反射方法 | 设置反射的成员变量 | 设置方法/成员可见性 )
  4. 【贪心】Codeforces Round #436 (Div. 2) D. Make a Permutation!
  5. CHROME开发者工具的小技巧
  6. 【研发管理】为什么你的高效交付,却没有好的业绩
  7. 关于修改了virc(增加了:set nu)但是vim行号还是不显示的问题
  8. Redux/Mobx面试题汇总
  9. LeetCode MySQL 1174. 即时食物配送 II
  10. 吴立德机器学习笔记(转)
  11. linux十分钟调度一次,linux系统任务调度命令crontab
  12. 计算机系统的优化具体操作,从八个方面来探讨计算机操作系统的优化
  13. NET报表工具 EastReport
  14. 【算法学习】【图像增强】【Retinex】Retinex Image Processing(NASA)
  15. python典型安装_python安装某些第三方包报错解决办法
  16. 用canvas画一个刮刮卡
  17. 算法训练 完数 C语言
  18. 30【源码】数据可视化大屏:基于 Echarts + Python Flask 实现的32-9超宽大屏 - 中国国际疫情实时追踪
  19. 如何实现图片和图题的组合
  20. 有趣的Windows桌面图标

热门文章

  1. GCD 信号量控制并发 (dispatch_semaphore)
  2. java调用libreoffice_使用Open / LibreOffice开始使用UNO和Java
  3. python跳一跳编程构造_python实现微信跳一跳辅助工具步骤详解
  4. System Verilog面向对象编程(OPP)基础——类(class)的基本使用
  5. 【05】CC - 格式
  6. WDS服务不能启动-----Service-specific error code 1056767740
  7. spring3.1声明式事务管理
  8. 介绍Linux系统如何初始化和启动系统服务的
  9. Java中只存在值传递
  10. 公司官网无法通过域名访问,原来是tomcat配置出了问题