Pet*_*217 1 c++ polymorphism inheritance
这可能是普通C++用户的基本问题.在功能上,我有一个ECG监视器,并希望选择在运行时使用哪种输出格式.我已经设置了两个暴露相同方法和成员的类(例如,ECGRecordingDefaultFormat和ECGRecordingEDFFormat). - > InsertMeasure, - > setFrequency, - > setPatientName等.
我知道我可以定义每个格式类类型的一个实例,然后输入:
if (ECGFormatToUse == ECGFormat.EDF) {
ecgDefaultFormat.InsertMeasure(x);
}
if (ECGFormatToUse == ECGFormat.Default) {
ecgEDFFormat.InsertMeasure(x);
}
Run Code Online (Sandbox Code Playgroud)
整个代码都是如此,但我想我可能不会完全使用C++的动态类型.
问题是:我可以在main()中定义一个变量,并在运行时选择我想要的格式后,让代码使用正确的类及其公开的'InsertMeasure'方法,避免在整个过程中使用大量的if/else码?
我很高兴只能参考我应该使用的继承/多态(?)的哪个方面,并且可以将其余部分谷歌.
多谢你们.
皮特
您可以将工厂模式与C++的多态性结合起来.
class Base
{
virtual void InsertMeasure() = 0; //virtual pure, make the base class abstract
};
class ECGRecordingDefaultFormat : public Base
{
virtual void InsertMeasure();
};
class ECGRecordingEDFFormat : public Base
{
virtual void InsertMeasure();
};
class Factory
{
static Base* create(ECGFormat format)
{
if ( format == ECGFormat.EDF )
return new ECGRecordingEDFFormat;
if ( format == ECGFormat.Default )
return new ECGRecordingDefaultFormat;
return NULL;
}
};
int main()
{
ECGFormat format;
//set the format
Base* ECGRecordingInstance = Factory::create(format);
ECGRecordingInstance->InsertMeasure();
return 0;
}
Run Code Online (Sandbox Code Playgroud)