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

实例:节流阀类: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. 访问类的私有属性(RTTI和模仿类2种方法)

    如何访问类的私有属性? 下面以 TPathData 为例,它有一个私有属性 PathData,储存了每一个曲线点,但一般无法修改它,需要利用下面方法,才能访问修改(若有更好的方法,歡迎分享): 一.利 ...

  2. 记一次 qW3xT.4,解决挖矿病毒。

    最近感觉我的服务器特别卡,打开数据库都半天,刚开始以为网咯不好也没太在意. 利用top命令: 这时候问题出来了,最高cpu占用100%,那我用啥??? 根据进程id 一看究竟,ps -ef|grep ...

  3. Spring单例模式多线程安全问题-有状态的Bean

    Spring单例与线程安全小结 一.Spring单例模式与线程安全 Spring框架里的bean,或者说组件,获取实例的时候都是默认的单例模式,这是在多线程开发的时候要尤其注意的地方. 单例模式的意思 ...

  4. asp.net core系列 66 Dapper介绍--Micro-ORM

    一.概述 目前对于.net的数据访问ORM工具很多,EF和EF Core是一个重量级的框架.最近在搭建新的项目架构,来学习一下轻量级的数据访问ORM工具Dapper.Dapper支持SQL Serve ...

  5. Spring源码解读之BeanFactoryPostProcessor的处理

    前言 前段时间旁听了某课堂两节Spring源码解析课,刚好最近自己又在重新学习中,便在这里记录一下学习所得.我之前写过一篇博文,是介绍BeanFactoryPostProcessor跟BeanPost ...

  6. GIS热力图制作与位置大数据分析

    最近有很多朋友咨询位置数据.热力图等等东西,我一一进行了解答,但是个人精力实在有限,特写一个博客进行详细技术说明,其实这个东西位置数据.百度地图POI.高德地图POI等数据爬取.存储都较为简单,热力图 ...

  7. spring源码解析之IOC容器(四)——属性注入

    上一篇跟踪了bean的创建过程,接下来,我们继续跟踪bean的属性填充的过程.先回到doCreateBean方法,代码如下: protected Object doCreateBean(final S ...

  8. Java 泛型学习总结

    前言 Java 5 添加了泛型,提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型. 泛型的本质是参数化类型,可以为以前处理通用对象的类和方法,指定具体的对象类型.听起来有点抽象, ...

  9. MAC subline批处理

    代码块批量操作: command + A command + shift + L command + < command + > 按照":"进行换行操作: commd ...

  10. 【python3两小时快速入门】入门笔记01:基础

    又要我搞爬虫了,这次的源网站使用的ajax加载数据,我用java爬下来的页面内容部分全都是空,虽然java也有插件,但是使用起来感觉很麻烦,所以,python!老子来了.    1. 版本:pytho ...