C++代码信息

运行结果
教程手册
代码仓库
极速运行
交互输入
极速运行模式,不支持键盘输入语句但是拥有更高的运行速度,输出简洁明了 。 点击编辑器上方的运行按钮即刻体验吧。
以下是用户最新保存的代码
斐波那契数列 发布于:2020-11-25 00:39 继承和组合混搭情况下的类构造和析构 发布于:2020-11-24 14:41 const修饰 发布于:2020-11-23 15:15 地图着色 给已知的地图(比如中国地图)着色,请设计地图着色软件,对个区域(各省)进行着色,要求相邻区域(省)所使用的颜色不同,并保证使用的颜色最少(最少是四色)。 发布于:2020-11-21 12:48 运动会排程算法 在安排运动会比赛日程时,需要考虑如何安排比赛项目,才能使同一运动员参加的不同项目不在同一日进行,同时又使比赛总的日程最短。 发布于:2020-11-21 12:19 普通站群配置IP 发布于:2020-11-26 15:43 continue 语句组成 发布于:2020-11-20 11:16 对输入英文字母原样输出 发布于:2020-11-20 11:00 跳出循环代码 发布于:2020-11-20 10:47 字符串类 (运算符重载 =,[],==,!=,<<,>>) 发布于:2020-11-20 16:45 const修饰指针 发布于:2020-11-19 19:18 数组类 运算符重载(=,[],==,!=,<<,>>) 发布于:2020-11-19 10:57 c++用类建立猜数字小游戏 发布于:2020-11-17 15:31 打印数组 (数组类案例) 发布于:2020-11-17 16:12 前置++,--,和后置++,--运算符重载 发布于:2020-11-16 17:11 运算符重载(用友元函数实现私有属性) 发布于:2020-11-16 16:36 c++ 的demo 体验 发布于:2020-11-16 14:49 排序算法之插入排序 发布于:2020-11-16 16:54 判断两圆是否相交( 全局函数改为类成员函数) 发布于:2020-11-13 15:31 排序算法之希尔排序 发布于:2020-11-12 17:43 2种访问静态成员变量方法 发布于:2020-11-12 14:48 构造和析构调用顺序 发布于:2020-11-11 16:53 求最大值并输出 发布于:2020-11-10 13:00 C++prime5 1.4.1 发布于:2020-11-09 18:03 C++prime5 P10 发布于:2020-11-09 17:55 判断两圆是否相交 发布于:2020-11-13 15:29 原型模式之孙悟空: 发布于:2020-11-06 19:24 原型模式示例 发布于:2020-11-06 15:29 判断点是否在圆内 发布于:2020-11-04 16:38 中缀表达式转化为后缀表达式 发布于:2020-10-30 19:03 中缀表达式转化为后缀表达式 发布于:2020-10-30 19:03 中缀表达式转化为后缀表达式 发布于:2020-10-30 18:57 约瑟夫环 c++实现 发布于:2020-10-28 19:22 定义一个单链表并赋值 发布于:2020-10-23 17:25 找幸运数.cpp 发布于:2020-10-22 17:19 数据结构相关代码 发布于:2020-10-21 21:45 从键盘输入一串字符,以回车键结束,分别统计输入的字母、数字和其它字符的个数 发布于:2020-10-15 17:41 从键盘输入一串字符,以回车键结束,分别统计输入的字母、数字和其它字符的个数 发布于:2020-10-15 17:24 c++学习笔记——类与对象 发布于:2020-10-07 16:57 dfs "ABC"全排列 发布于:2020-09-26 00:47 C++冒泡排序 发布于:2020-09-25 21:42 List8Simaliar JuZhen 发布于:2020-09-24 11:30 List8Simaliar JuZhen 发布于:2020-09-24 11:29 List8Simaliar JuZhen 发布于:2020-09-23 19:27 C++ Heapify 发布于:2020-09-23 00:32 C++实现简单选择排序 发布于:2020-09-22 20:19 C++实现快速排序 发布于:2020-09-22 19:58 测试用cpp 发布于:2020-09-19 20:35 保存了,结成取最右 发布于:2020-09-17 19:28 计算回国日期。 发布于:2020-09-16 19:00 [更多]
显示目录

数据抽象

C++ 数据抽象

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

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

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

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

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

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

在 C++ 中,我们使用来定义我们自己的抽象数据类型(ADT)。您可以使用类 ostreamcout 对象来输出数据到标准输出,如下所示:

#include <iostream>
using namespace std;

int main( ) {
   cout << "Hello C++" <<endl;
   return 0;
}

在这里,您不需要理解 cout 是如何在用户的屏幕上显示文本。您只需要知道公共接口即可,cout 的底层实现可以自由改变。

访问标签强制抽象

在 C++ 中,我们使用访问标签来定义类的抽象接口。一个类可以包含零个或多个访问标签:

  • 使用公共标签定义的成员都可以访问该程序的所有部分。一个类型的数据抽象视图是由它的公共成员来定义的。
  • 使用私有标签定义的成员无法访问到使用类的代码。私有部分对使用类型的代码隐藏了实现细节。

访问标签出现的频率没有限制。每个访问标签指定了紧随其后的成员定义的访问级别。指定的访问级别会一直有效,直到遇到下一个访问标签或者遇到类主体的关闭右括号为止。

数据抽象的好处

数据抽象有两个重要的优势:

  • 类的内部受到保护,不会因无意的用户级错误导致对象状态受损。
  • 类实现可能随着时间的推移而发生变化,以便应对不断变化的需求,或者应对那些要求不改变用户级代码的错误报告。

如果只在类的私有部分定义数据成员,编写该类的作者就可以随意更改数据。如果实现发生改变,则只需要检查类的代码,看看这个改变会导致哪些影响。如果数据是公有的,则任何直接访问旧表示形式的数据成员的函数都可能受到影响。

数据抽象的实例

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

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

设计策略

抽象把代码分离为接口和实现。所以在设计组件时,必须保持接口独立于实现,这样,如果改变底层实现,接口也将保持不变。

在这种情况下,不管任何程序使用接口,接口都不会受到影响,只需要将最新的实现重新编译即可。

由JSRUN为你提供的C++在线工具
        JSRUN提供的C++在线运行,C++ 在线编译工具,基于linux操作系统环境提供线上编译和线上运行,具有运行快速,运行结果与常用开发、生产环境保持一致的特点。

title

使用此草稿 删除草稿

皮肤:

运行模式:

嵌入代码 iframe嵌入: