雨刷作业——一个类实现

//以下代码是用一个类来实现雨刷问题,仅供参考
#include <iostream.h>
#include <stdlib.h>

class WindshieldWiper{  //雨刷类定义
private:
	int wiperSpeed;					//雨刷速度
	int leverPosition;				//控制杆位置,取值为0、1、2、3
	int dialPosition;				//刻度盘位置,取值为1、2、3
	void setWiperSpeed();			//设置雨刷速度
	void setLeverPosition(int);		//设置控制杆位置
	void setDialPosition(int);		//设置刻度盘位置
public:
	WindshieldWiper(int w,int l,int d);
	int getWiperSpeed();			//获取雨刷速度
	int getLeverPostion();			//获取控制杆位置
	int getDialPosition();			//获取刻度盘位置
	void senseLeverUp();			//感知控制杆升档
	void senseLeverDown();			//感知控制杆降档
	void senseDialUp();				//感知刻度盘升档
	void senseDialDown();			//感知刻度盘降档
};

WindshieldWiper::WindshieldWiper(int w = 0,int l = 0,int d = 1)  //构造函数
{
	wiperSpeed = w;
	leverPosition = l;
	dialPosition = d;
}

int WindshieldWiper::getDialPosition()
{
	return dialPosition;
}

int WindshieldWiper::getLeverPostion()
{
	return leverPosition;
}

int WindshieldWiper::getWiperSpeed()
{
	return wiperSpeed;
}

void WindshieldWiper::setDialPosition(int d)
{
	dialPosition = d;
}

void WindshieldWiper::setLeverPosition(int l)
{
	leverPosition = l;
}

void WindshieldWiper::setWiperSpeed()
{
	if(leverPosition == 0)				//控制杆为0档
		wiperSpeed = 0;
	else
		if(leverPosition == 1)			//控制杆为1档
		{
			if(dialPosition == 1)		//刻度盘为1档
				wiperSpeed = 4;
			else
				if(dialPosition == 2)	//刻度盘为2档
					wiperSpeed = 6;
				else
					wiperSpeed = 12;	//刻度盘为3档
		}
		else
			if(leverPosition == 2)		//控制杆为2档
				wiperSpeed = 30;
			else						//控制杆为3档
				wiperSpeed = 60;
	cout<<"Lever position is: "<<leverPosition<<endl;
	cout<<"Dial position is: "<<dialPosition<<endl;
	cout<<"Wiper speed is: "<<wiperSpeed<<endl;
}

void WindshieldWiper::senseDialDown()
{
	switch(dialPosition)
	{
	case 1: break;
	case 2: setDialPosition(1);break;
	case 3: setDialPosition(2);break;
	}
	setWiperSpeed();
}

void WindshieldWiper::senseDialUp()
{
	switch(dialPosition)
	{
	case 1: setDialPosition(2);break;
	case 2: setDialPosition(3);break;
	case 3: break;
	}
	setWiperSpeed();
}

void WindshieldWiper::senseLeverDown()
{
	switch(leverPosition)
	{
	case 0: break;
	case 1: setLeverPosition(0);break;
	case 2: setLeverPosition(1);break;
	case 3: setLeverPosition(2);break;
	}
	setWiperSpeed();
}

void WindshieldWiper::senseLeverUp()
{
	switch(leverPosition)
	{
	case 0: setLeverPosition(1);break;
	case 1: setLeverPosition(2);break;
	case 2: setLeverPosition(3);break;
	case 3: break;
	}
	setWiperSpeed();
}

void menu(WindshieldWiper &w)  //菜单函数
{
	int flag;
	cout<<"Lever position is: "<<w.getLeverPostion()<<endl;
	cout<<"Dial position is: "<<w.getDialPosition()<<endl;
	cout<<"Wiper speed is: "<<w.getWiperSpeed()<<endl;
	while(1)
	{
		cout<<"==================Please choose operation============"<<endl;
		cout<<"\t==========1:Lever Up==========="<<endl;
		cout<<"\t==========2:Lever Down========="<<endl;
		cout<<"\t==========3:Dial Up============"<<endl;
		cout<<"\t==========4:Dial Down=========="<<endl;
		cout<<"\t==========0:Quit==============="<<endl;
		cout<<"====================================================="<<endl;
		cout<<"Input the number(0~4):";
		cin>>flag;
		switch(flag)
		{
		case 1:w.senseLeverUp();break;
		case 2:w.senseLeverDown();break;
		case 3:w.senseDialUp();break;
		case 4:w.senseDialDown();break;
		case 0:exit(0);
		}
	}
}

//主函数
void main()
{
	WindshieldWiper w(0,0,1);
	menu(w);
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-25 19:39:35

雨刷作业——一个类实现的相关文章

Java语言程序设计 上机实验4 掌握声明接口、一个类实现接口的声明和使用方法

Java语言程序设计 上机实验4 实验目的: 理解接口的作用,理解接口和实现接口的类的关系,掌握声明接口.一个类实现接口的声明和使用方法:熟悉Java语言包和实用包中的常用类. 实验内容:(*)为选做 声明圆柱体类Cylinder,继承椭圆类Ellipse(实现周长Perimeter接口和面积Area接口),为圆柱体类设计较为全面的构造方法,并实现体积Volume接口,计算表面积和体积. 将Java的若干关键字(15个以上)保存在一个字符串数组中,对其按升序排列,再采用顺序查找和二分法查找,判断

一个类有多大

#include <iostream> using namespace std; class A{}; class B { int b; char c; }; class C { int c1; static int c2; }; int C::c2 = 1; class D:public C,public B{ int d; }; int main() { cout<<"sizeof(A)="<<sizeof(A)<<endl; cou

C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值

转自goldeneyezhang原文 C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值 C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值总结: 对应某个类的实例化的对象tc, 遍历获取所有属性(子成员)的方法(采用反射): Type t = tc.GetType();//获得该类的Type //再用Type.GetProperties获得PropertyInfo[],然后就可以用foreach 遍历了 foreach (PropertyInfo pi

java进阶之反射:反射基础之如何获取一个类以及如何获取这个类的所有属性和方法(1)

java学习一段时间之后,大家可能经常会听到反射这个词,那么说明java已经学习到一个高一点的层次了.接下来我会一步步和大家一起揭开java高级特性反射的神秘面纱. 首先介绍下类对象这个概念,可能会经常用到这个概念: 类对象:java中有句很经典的话"万事万物皆对象",相信大家都不陌生,这句话告诉了我们java的特征之一,那就是面向对象.java中类的概念我们都很熟悉,既然万事万物皆是对象,那么类是谁的对象呢?<对象的概念:一个类的实例>换句话说,类是谁的实例.如此就有了类

MFC中怎样完全删除一个类

测试环境:Windows7 32bit.VC++6.0 VC++6.0中添加类很方便,不过删除一个类就没有那么直观了.如果想删除了一个类,其实只需要这样做: 在FileView中的Source Files和Header Files中分别移除类对应的.cpp和.h文件(点击该文件,然后按Delete即可移除,文件仅从工程中移除,并没有在工程目录下被删除) 关闭VC++6.0,然后删除工程目录下的.clw文件,以及类对应的.cpp和.h文件 重新启动VC++6.0,选择View中ClassWizar

ExtJs--07--Ext.define定义一个类的过程

Ext.onReady(function(){ //Ext定义一个类 Ext.define( "Person", { config:{ name:"jack", age:22 }, fangfa:function(){ Ext.Msg.alert("标题信息","提示内容信息") } , constructor:function(config){ //测试构造器调用没有及参数传递进来没有 // for(var attr in

如何限制一个类只在堆上分配和栈上分配(StackOnly HeapOnly)

[本文链接] http://www.cnblogs.com/hellogiser/p/stackonly-heaponly.html [题目] 如何限制一个类只在堆上分配和栈上分配? [代码] C++ Code 1234567891011121314   class StackOnly { private:     void *operator new(size_t size) {}; }; class HeapOnly { public:     void destroy(); private

OC -- 第一个类

类名:Car 属性:轮胎个数.时速 行为:跑 完整写一个类:类的声明和实现 1.    类的声明 代码: // NSObject 再Foundation框架中 #import <Foundation/Foundation.h> // NSObject 基类 @interface Car : NSObject { // 声明对象属性(成员变量,默认会初始化为0) @public int  wheels;  // 轮胎个数 int  speed;  //  时速 } // 方法(行为) // 只要

虚基类练习:动物(利用虚基类建立一个类的多重继承,包括动物(animal,属性有体长,体重和性别),陆生动物(ter_animal,属性增加了奔跑速度),水生动物(aqu_animal,属性增加了游泳速度)和两栖动物(amp_animal)。)

Description 长期的物种进化使两栖动物既能活跃在陆地上,又能游动于水中.利用虚基类建立一个类的多重继承,包括动物(animal,属性有体长,体重和性别),陆生动物(ter_animal,属性增加了奔跑速度),水生动物(aqu_animal,属性增加了游泳速度)和两栖动物(amp_animal).其中两栖动物保留了陆生动物和水生动物的属性. Input 两栖动物的体长,体重,性别,游泳速度,奔跑速度(running_speed) Output 初始化的两栖动物的体长,体重,性别,游泳速度