第六次作业解法二:两个类

本文介绍了一个使用两个类解决雨刷控制问题的程序设计案例。通过WindshieldWiper类管理和设置雨刷速度,以及Lever类感知并传递控制杆和刻度盘的位置变化,实现了根据控制杆和刻度盘的输入调整雨刷速度的功能。

以下代码实现用两个类解决问题,仅供参考

/**********************************************************/ //Function : main,雨刷控制程序 //parm : //comment : //return : void //Author : //date : 2011.11.8 /**********************************************************/ #include <iostream.h> #include <stdlib.h> class WindshieldWiper{ //雨刷类 private: int wiperSpeed; //雨刷速度 public: WindshieldWiper(int w = 0); //构造函数 int getWiperSpeed(); //获取雨刷速度,用于显示输出 void setWiperSpeed(int s); //设置雨刷速度 }; class Lever{ //控制杆类,将控制杆与刻度盘做成一个类 private: int leverPosition; //控制杆位置 int dialPosition; //刻度盘位置 WindshieldWiper m; //雨刷对象,实现将控制杆与雨刷类联系起来 public: Lever(int l,int d):leverPosition(l),dialPosition(d){} ~Lever(){} void senseLeverUp(); //感知控制杆升挡 void senseLeverDown(); //感知控制杆降挡 void senseDialUp(); //感知刻度盘升挡 void senseDialDown(); //感知刻度盘降挡 int getLeverPostion(); //获取控制杆位置 void setLeverPosition(int); //设置控制杆位置 int getDialPosition(); //获取刻度盘位置 void setDialPosition(int); //设置刻度盘位置 void sendspeed(); //向雨刷传递雨刷速度, //即判断雨刷以什么速度摆动由控制杆类完成 }; WindshieldWiper::WindshieldWiper(int w ) { wiperSpeed = w; } void WindshieldWiper::setWiperSpeed(int s) { wiperSpeed = s; } int WindshieldWiper::getWiperSpeed() { return wiperSpeed; } int Lever::getDialPosition() { return dialPosition; } int Lever::getLeverPostion() { return leverPosition; } void Lever::setDialPosition(int d) { dialPosition = d; } void Lever::setLeverPosition(int l) { leverPosition = l; } void Lever::sendspeed() { int s; if(leverPosition == 0) //控制杆位置为0挡 s = 0; //雨刷速度为0 else { if(leverPosition == 1) //控制杆位置为1挡 { if(dialPosition == 1) //刻度盘位置为1挡 s = 4; else { if(dialPosition == 2) //刻度盘位置为2挡 s = 6; else //刻度盘位置为3挡 s = 12; } } else { if(leverPosition == 2) //控制杆位置为2挡 s = 30; else //控制杆位置为3挡 s = 60; } } m.setWiperSpeed(s); cout<<"Lever position is: "<<leverPosition<<endl; //输出 cout<<"Dial position is: "<<dialPosition<<endl; cout<<"Wiper speed is: "<<m.getWiperSpeed()<<endl; } void Lever::senseDialDown() { switch(dialPosition) { case 1: break; case 2: setDialPosition(1);break; case 3: setDialPosition(2);break; } sendspeed(); } void Lever::senseDialUp() { switch(dialPosition) { case 1: setDialPosition(2);break; case 2: setDialPosition(3);break; case 3: break; } sendspeed(); } void Lever::senseLeverDown() { switch(leverPosition) { case 0: break; case 1: setLeverPosition(0);break; case 2: setLeverPosition(1);break; case 3: setLeverPosition(2);break; } sendspeed(); } void Lever::senseLeverUp() { switch(leverPosition) { case 0: setLeverPosition(1);break; case 1: setLeverPosition(2);break; case 2: setLeverPosition(3);break; case 3: break; } sendspeed(); } void menu() //菜单 { int flag; Lever obj(0,1); while(1) { cout<<"Please choose operation:"<<endl; cout<<endl<<"\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<<endl; cin>>flag; switch(flag) //选择操作 { case 1:obj.senseLeverUp();break; case 2:obj.senseLeverDown();break; case 3:obj.senseDialUp();break; case 4:obj.senseDialDown();break; case 0:exit(0); default: cout<<"Invalid number"<<endl; } } } //main函数 void main() { WindshieldWiper w(0); menu(); }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值