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 是对外隐藏的,用户不需要了解它,但它又是类能正常工作所必需的。

C++基础教程之数据是如何封装的相关推荐

  1. java注解定义时间格式_SpringBoot基础教程2-1-8 数据验证-自定义日期格式验证

    1 概述 javax.validation包与hibernate-validator包中注解能满足大部分需求,但是还是有必要熟悉下自定义数据验证注解,如日期格式验证. 2 添加依赖 org.sprin ...

  2. Android移动应用基础教程【数据存储】

    本章目录 一.数据存储方式 二.文件存储 1.将数据存入文件中 1.1.内部存储 1.2.外部存储 2.从文件中读取数据 2.1.读取内部存储中的文件的数据 2.2.读取外部存储中的文件数据 3.申请 ...

  3. 2022 最新 Android 基础教程,从开发入门到项目实战【b站动脑学院】学习笔记——第六章:数据存储

    第 6 章 数据存储 本章介绍Android 4种存储方式的用法,包括共享参数SharedPreferences.数据库SQLite.存储卡文 件.App的全局内存,另外介绍Android重要组件-应 ...

  4. Spring Boot 2.x基础教程:使用LDAP来管理用户与组织数据

    很多时候,我们在做公司系统或产品时,都需要自己创建用户管理体系,这对于开发人员来说并不是什么难事,但是当我们需要维护多个不同系统并且相同用户跨系统使用的情况下,如果每个系统维护自己的用户信息,那么此时 ...

  5. python平稳性检验_时间序列预测基础教程系列(14)_如何判断时间序列数据是否是平稳的(Python)...

    时间序列预测基础教程系列(14)_如何判断时间序列数据是否是平稳的(Python) 发布时间:2019-01-10 00:02, 浏览次数:620 , 标签: Python 导读: 本文介绍了数据平稳 ...

  6. Spring Cloud Alibaba基础教程:Nacos的数据持久化

    <Spring Cloud Alibaba基础教程>连载中,关注我一起学习!前情回顾: <使用Nacos实现服务注册与发现> <支持的几种服务消费方式> <使 ...

  7. ASP.NET Core Identity 迁移数据 - ASP.NET Core 基础教程 - 简单教程,简单编程

    ASP.NET Core Identity 迁移数据 - ASP.NET Core 基础教程 - 简单教程,简单编程 原文:ASP.NET Core Identity 迁移数据 - ASP.NET C ...

  8. 在列表前方插入一个数据_通俗易懂的Redis数据结构基础教程

    Redis有5个基本数据结构,string.list.hash.set和zset.它们是日常开发中使用频率非常高应用最为广泛的数据结构,把这5个数据结构都吃透了,你就掌握了Redis应用知识的一半了. ...

  9. 前端图片有时候能显示有时候不显示_web前端基础教程:两种数据存储思路

    Web前端开发基础,Web前端基础教程 数据存储是数据流在加工过程中产生的临时文件或加工过程中需要查找的信息.数据以某种格式记录在计算机内部或外部存储介质上.数据存储要命名,这种命名要反映信息特征的组 ...

最新文章

  1. 【Python】解析Python中类的使用
  2. 三代测序的基本原理、组装方法和应用场景
  3. 实用的人工智能 但数据 Python 速查表
  4. Jquery : 上下滚动--单行 批量多行 文字图片翻屏【转】
  5. 自学编程是从python语言还是c语言开始-非计算机专业大学生想自学编程应该学C语言还是学Python?...
  6. Android核心分析 之一分析方法论探讨之设计意图
  7. 使用示例_在Unity中使用ComputeShader示例
  8. 一个系统的base.css,兼容IE7,IE8,IE9,IE10,IE11,firefox,safari,谷歌,360,世界之窗等浏览器起的公共css
  9. 肝!Python 网络编程
  10. 决策树-CART算法
  11. Angular、React 当前,Vue.js 优劣几何?
  12. 一款C++ 可视化调试工具增强插件
  13. C++实现 逆波兰表达式计算问题
  14. lammps软件介绍与使用
  15. 文字表情 emoji 解析大全
  16. 零基础SQL教程: 什么是SQL 01
  17. 前端随心记---------WebSocket
  18. 学java用不用学ps_【No935】零基础学习从入门到精通Ps课程
  19. 小程序转uni-app——引入组件显示问题
  20. 给生命一段独处的时光

热门文章

  1. [转载] windows下Python2.7 的 pyOpenGL模块安装
  2. [转载] 算法导论:分治法,python实现合并排序MERGE-SORT
  3. 记录一次有意思的XSS过滤绕过
  4. python3,进程间的通信
  5. 浅谈内联元素inline
  6. os.path 大全
  7. select option 不写 value 属性 产生的浏览器差异
  8. 关于mysql_free_result和mysql_close的解惑
  9. 【ROS学习笔记】(四)订阅者Subscriber的实现
  10. a和a的区别、二维数组的本质及多维数组