类是一种新的数据类型,类似于数据结构,只是它拥有数据结构所没有的部分——“成员函数”,正是因为它所拥有的成员函数这一特性,使得它能隐藏“数据结构”(类)中的数据,不被用户所知道。通过类中的成员函数,使得类的实现与连接都是通过成员函数来进行实现的。接下来我们通过一个实例来对这一概念进行论述:

实例:节流阀类:throttle

  对于节流阀,想必大家都比较熟悉,就通过移动控制杆来进行控制液体的流入流出,即为控制流量,所以控制杆所在的位置与通过节流阀的流量便存在一个相关性。通过控制控制杆的位置从而便可以控制通过节流阀的流量,假设节流阀有10个位置,当在位置10时便是流量最大时,0时便是流量为零时。所以根据节流阀的特点,我们可以列出这样一些特点:

1、当前的位置:position

2、当前的流量:flow(根据相关性,使用最大流量与当前流量的比来代表,即最大流量的位置与当前位置的比)

3、节流阀当前是否关闭:is_no

4、移动控制杆到什么位置:shift

5、将节流阀进行关闭 shut_off

所以我们便可以建立一个throttle类了:

class throttle{
    public:
      void shut_off();//初始化当前位置,对节流阀进行关闭操作
      void shift(int amount);//输入节流阀的移动位置
      double flow() const;//输出最大位置与当前位置的比值

      bool is_no() const;//判断是否开启状态
    private:
      int position;
};

从而根据提供的成员函数,我们进行对成员函数的具体实现进行编写:

void throttle::shut_off(){
  position=0;
}

void throttle::shift(int amount){
  position+=amount;
  if(position<0){
    position=0;
  }else if(position>10){
    position=10;
  }
}

double throttle::flow()const {
  return position/10.0;
}

bool throttle::is_no()const{
  return (flow()>0);
}

这是我们便可以进行具体情况具体分析使用这个类了;假如有一个游泳池,现在需要通过这个节流阀进行放水,在放水的过程中每次一小时节流阀的位置变化一位,这时要求求出给定一个位置量,输出它的每小时的流量大小?

int main()
{
  throttle sample;
  int user_input;
  cout<<"I have a throttle with 10 position."<<endl;
  cout<<"Where would you like to set the throttle?"<<endl;
  cout<<"Please type a number 0 to 10.";
  cin>>user_input;
  sample.shut_off();
  sample.shift(user_input);

  while(sample.is_no()){
    cout<<"The flow is now "<<sample.flow()<<endl;
    sample.shift(-1);
  }
  cout<<"The flow is now off"<<endl;
  return EXIT_SUCCESS;

}

结果如下:

抽象数据类型与C++的更多相关文章

  1. 抽象数据类型ADT

    ADT(Abstract Data Type) 类型由什么组成? 一个类型(type)指定两类信息,一个属性集和一个操作集. 假设要定义一个新的数据类型.首先,要提供存储数据的方式,可能是通过设计一个 ...

  2. C语言泛型编程--抽象数据类型

    一.数据类型: 在任何编程语言中,数据类型作为一个整体,ANSI-C包含的类型为:int.double.char……,程序员很少满意语言本身提供的数据类型,一个简单的办法就是构造类似:array.st ...

  3. ORACLE抽象数据类型

    ORACLE抽象数据类型 *抽象数据类型*/1,抽象数据类型 概念包含一个或多个子类型的数据类型不局限于ORACLE的标准数据类型可以用于其他数据类型中 2,创建抽象数据类型 的语法(必须用NOT F ...

  4. ADT(abstract data types)抽象数据类型

    1.What is it? An abstract data type is a set of objects together with a set of operations. 抽象数据类型是带有 ...

  5. 数据结构 集合_集合(数学)抽象数据类型的C语言实现

    链表是实现集合的一种理想的方式.将List以typedef的方式重命名为Set.这样做能保留链表简洁的特性,还能使集合具有了一些多态的特性. 使用这种方法的最大好处就是可以使用list_next来遍历 ...

  6. 【Python&数据结构】 抽象数据类型 Python类机制和异常

    这篇是<数据结构与算法Python语言描述>的笔记,但是大头在Python类机制和面向对象编程的说明上面.我也不知道该放什么分类了..总之之前也没怎么认真接触过基于类而不是独立函数的Pyt ...

  7. Week1绪论--抽象数据类型

    一.作业题目 1.构造有理数T,元素e1,e2分别被赋以分子.分母值 2.销毁有理数T 3.用e(引用类型参数)返回有理数T的分子或分母,当入参i为1时返回分子, i为2是返回分母. 4.将有理数T的 ...

  8. DS博客作业01--日期抽象数据类型设计与实现

    1.思维导图及学习体会 1.1第一章绪论知识点思维导图 1.2 学习体会 这次博客园和大作业是我在编程学习中的有意义的进步,第一次尝试使用vs,并且通过同学的一些网站的推荐,和热心同学的帮忙,简单学会 ...

  9. 集合抽象数据类型的C语言实现

    链表是实现集合的一种理想的方式.将List以typedef的方式重命名为Set.这样做能保留链表简洁的特性,还能使集合具有了一些多态的特性. 使用这种方法的最大好处就是可以使用list_next来遍历 ...

  10. 抽象数据类型(ADT)

    概念 抽象数据类型(ADT),脱离具体实现定义数据结构,它的定义着重于做什么,而忽略怎么做 举例 列表.栈.队列 列表 列表,也叫线性表 抽象定义:数据项线性排列,可以插入某一项,删除某一项,读取某一 ...

随机推荐

  1. 第一式、单例模式-Singleton模式(创建型)

    一.简介 单例模式主要用的作用是用于保证程序运行中某个类只有一个实例,并提供一个全局入口点.单例模式(Singleton)为GOF阐述的标准24种设计模式中最简单的一个.但随着时间推移,GOF所阐述的 ...

  2. vue+element——父级元素fixed,遮罩会在上方

    前言 这种场景还是蛮场景的 一个共用的head组件,组件里面通常是当前系统登录账号名 退出登录 修改密码这样的弹框 但是现在我又想head不跟着main内容上下滑动.所以用了fixed 定位. 问题来 ...

  3. 血的教训--如何正确使用线程池submit和execute方法

    血的教训之背景:使用线程池对存量数据进行迁移,但是总有一批数据迁移失败,无异常日志打印 凶案起因 ​ 听说parallelStream并行流是个好东西,由于日常开发stream串行流的场景比较多,这次 ...

  4. 【dateFormatSymbols】JAVA特殊日期格式转换

    记录:特殊日期格式转换,如将yyyyMMdd转为01MAY2019 public static final String DATE_VIP_FORMAT = "yyyyMMdd"; ...

  5. vscode解决同步设置插件连接不上git

    vscode有一款比较好用的插件,就是设置同步.可以在一台电脑上同步另一台电脑的所有配置及插件! Settings Sync 但是在公司电脑有个奇葩问题,就是连接不上git. 解决:配置代理 &quo ...

  6. jQuery-ajax-.get,.post方法

    在上一篇中详细介绍了jQuery中ajax局部方法$.load()的使用.下面来介绍两个全局方法$.get(),$.post()的使用. 1.这两个全局方法其实和上一篇中的$.load()方法使用是差 ...

  7. Android中控件属性详细总结(转载)

    转载地址:https://www.cnblogs.com/nanguojs/p/5950510.html 1.LinearLayout(线性布局): 可以分为水平线性:android:orientat ...

  8. 【朝花夕拾】Android自定义View篇之(八)多点触控(上)MotionEvent简介

    前言 在前面的文章中,介绍了不少触摸相关的知识,但都是基于单点触控的,即一次只用一根手指.但是在实际使用App中,常常是多根手指同时操作,这就需要用到多点触控相关的知识了.多点触控是在Android2 ...

  9. isinstance()函数判断数据类型

    判断是否是字符串 a = b = " print(isinstance(a,str)) print(isinstance(b,str)) False True 判断是否是列表 a = [,, ...

  10. 蓝桥杯:合并石子(区间DP+平行四边形优化)

    http://lx.lanqiao.cn/problem.page?gpid=T414 题意:…… 思路:很普通的区间DP,但是因为n<=1000,所以O(n^3)只能拿90分.上网查了下了解了 ...