灯光开关
请修改编辑器中的代码,完成以下功能:程序中定义了一个基类 Switchable,表示具有开和关两种状态的设备;一个派生类 Lamp,表示灯;以及一个类 Button,用于控制设备的开关状态。在主函数中,创建了一个 Lamp 对象和一个 Button 对象,Button 用于控制 Lamp 的状态。每次按下 Button 时,Lamp 和 Button 的状态都会同时改变。 请在代码中的 //**********found********** 标记处填写适当的代码,完成以下功能: 1. 实现 Switchable 类中的 isOn 方法,用于返回设备当前的开关状态。 2. 将 Switchable 类的 getDeviceName 方法定义为纯虚函数。 3. 在 Button 类中正确初始化 device 成员变量。 4. 实现 Button 类的 push 方法,使其能够根据当前状态切换设备的开关状态。 程序不需要输入,运行后会输出设备和按钮的状态变化。 输出示例: 灯的状态:关 按钮的状态:关 灯的状态:开 按钮的状态:开
#include<iostream>
using namespace std;
class Switchable{ //具有开、关两种状态的设备
bool is_on; //为 ture 表示“开”,为 false 表示“关”
public:
Switchable(): is_on(false){}
void switchOn(){ is_on=true; } //置为“开”状态
void switchOff(){ is_on=false; }//置为“关”状态
//**********found**********
bool isOn(){ _______________ } //返回设备状态
//**********found**********
virtual const char *getDeviceName()_______; //返回设备名称的纯虚函数
};
class Lamp: public Switchable{
public:
//返回设备名称,用于覆盖基类中的纯虚函数
const char *getDeviceName(){ return "Lamp"; }
};
class Button{ //按钮
Switchable *device; //按钮控制的设备
public:
//**********found**********
Button(Switchable &dev):____________{} //用参数变量的地址初始化device
bool isOn(){ return device->isOn(); } //按钮状态
void push(){ //按一下按钮改变状态
//**********found**********
if(isOn()) _________________;
else device->switchOn();
}
};
int main(){
Lamp lamp;
Button button(lamp);
cout<<"灯的状态:"<<(lamp.isOn()? "开" : "关")<<endl;
cout<<"按钮的状态:"<<(button.isOn()? "开" : "关")<<endl;
button.push(); //按一下按钮
cout<<"灯的状态:"<<(lamp.isOn()? "开" : "关")<<endl;
cout<<"按钮的状态:"<<(button.isOn()? "开" : "关")<<endl;
return 0;
}
控制台
调试终端
