一般来说,虚成员函数可以满足对象的动态类型匹配的需要,一个定义良好的类层次结构应该为基类中声明的每个虚成员函数定义有意义的操作。然而事情并非总是这样美妙。
假设有一个家电电器管理系统,可以管理电扇、电视机等。为了能够实现统一管理,我们设计一个抽象基类HomeElectricDevice来定义一些公共操作。
Class HomeElectricDevice{
Public:
Virtual void Open()=0; //打开
Virtual void close()=0; //关闭
Virtual void Adjust(bool updown)=0; //调节温度或者音量等。
//other methods
Private:
//common attrbutes…….
}
在基类的下面有一些派生来管理不同的电器,如ElectricFan, Television,它们实现了抽象基类的方法,并增加了一些特殊的操作。
Class ElectricFan:public HomeElectricDevice{ //电扇
Public:
Virtual void Open(){……} //打开
Virtual void Close(){…….} //关闭
Virtual void Adjust(bool updown){…..} //调节温度
//…..
Private:
//attrbutes….
};
Class Television:public HomeElectricDevice{ //电视机
Public:
Virtual void Open(){……} //打开
Virtual void Close(){…….} //关闭
Virtual void Adjust(bool updown){…..} //调节音量
//…..
Private:
//attrbutes….
}
显然电扇和电视机有一些不同,例如电视机可以播放VCD而电扇不能。