当前位置: 首页 > news >正文

C++ 数据抽象,C++ 数据封装

C++ 数据抽象:

数据抽象是指,只向外界提供关键信息,并隐藏其后台的实现细节,即只表现必要的信息而不呈现细节。

数据抽象是一种依赖于接口和实现分离的编程(设计)技术。

让我们举一个现实生活中的真实例子,比如一台电视机,您可以打开和关闭、切换频道、调整音量、添加外部组件(如喇叭、录像机、DVD 播放器),但是您不知道它的内部实现细节,也就是说,您并不知道它是如何通过缆线接收信号,如何转换信号,并最终显示在屏幕上。

因此,我们可以说电视把它的内部实现和外部接口分离开了,您无需知道它的内部实现原理,直接通过它的外部接口(比如电源按钮、遥控器、声量控制器)就可以操控电视。

现在,让我们言归正传,就 C++ 编程而言,C++ 类为数据抽象提供了可能。它们向外界提供了大量用于操作对象数据的公共方法,也就是说,外界实际上并不清楚类的内部实现。

例如,您的程序可以调用 sort() 函数,而不需要知道函数中排序数据所用到的算法。实际上,函数排序的底层实现会因库的版本不同而有所差异,只要接口不变,函数调用就可以照常工作。

C++ 数据封装:

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

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

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

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

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

相关文章:

  • c++中数据抽象与数据封装的区别
  • x ,1/x的关系; 反函数的实质:xy可以互换,就是进行坐标轴变化,就是关于y=x对称 反函数性质:f-1(f(x))=x; 反三角函数‘
  • 重要的三角函数公式
  • 函数奇偶性运算法则,以及复合函数奇偶性判断 ln的运算法则,对数函数运算法则 对数函数运算法则口诀,简单记忆
  • 完全二叉树:设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数, 第 h 层所有的结点都连续集中在最左边 满二叉树:深度为k且有2^k-1个结点的二叉树称为满二叉树
  • C++中char * 和char []的区别 堆栈区别 JAVA的JVM的内存可分为3个区:堆(heap)、栈(stack)和方法区(method)
  • 数据结构,完全二叉树,满二叉树
  • 数据结构之图的基本概念
  • p->next 指的是这个节点的指针域 还是下一个节点 单链表逆置; 无序链表与有序链表的区别: 单链表有无头指针遍历:
  • 闭散列,开散列其实就是处理冲突的方式; 散列函数的构造方法 冲突的处理方法 散列表上的查找 哈希之查找失败(当最后一位存在)
  • 线索二叉树,搜索二叉树,AVL二叉树,满二叉树,完全二叉树,平衡二叉树,最优二叉树
  • 并查集,合并 以及优化
  • 邻接矩阵,图的深度优先遍历 图邻接表,深度优先遍历 广度优先遍历 c++中Sort使用
  • 二叉树的四种遍历方法笔记 二叉树删除后操作
  • 让你透彻快速知道图的遍历之 、深度搜索(黑白块问题)、广度搜索之线性表存储和矩阵存储的遍历
  • 【译】JS基础算法脚本:字符串结尾
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • Angular数据绑定机制
  • github从入门到放弃(1)
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • JS 面试题总结
  • js面向对象
  • php的插入排序,通过双层for循环
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • 区块链将重新定义世界
  • 手机端车牌号码键盘的vue组件
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 学习笔记TF060:图像语音结合,看图说话
  • No resource identifier found for attribute,RxJava之zip操作符
  • 湖北分布式智能数据采集方法有哪些?
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • $(function(){})与(function($){....})(jQuery)的区别
  • (1)bark-ml
  • (26)4.7 字符函数和字符串函数
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (简单) HDU 2612 Find a way,BFS。
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • (转载)OpenStack Hacker养成指南
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • .htaccess 强制https 单独排除某个目录
  • .NET Core 中的路径问题
  • .NET 反射的使用
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • /etc/fstab和/etc/mtab的区别
  • [④ADRV902x]: Digital Filter Configuration(发射端)
  • [autojs]autojs开关按钮的简单使用
  • [BZOJ 4034][HAOI2015]T2 [树链剖分]
  • [DP 训练] Longest Run on a Snowboard, UVa 10285
  • [error] 17755#0: *58522 readv() failed (104: Connection reset by peer) while reading upstream
  • [hdu4622 Reincarnation]后缀数组