说我在c ++中有这样的课程:
class MyClass
{
public:
int MyMethod1 (/*Some Cool Args*/)
{
//do something
}
int MyMethod2 (/*More Args*/)
{
//do something
}
.
.
.
int MyMethodN (/*More Args*/)
{
//do something
}
}
现在,让我们说,根据运行时对象的状态,我需要使用MyMethode1,MyMethode2,...或MyMethodeN,它们都在贝斯相同但是改变它们的方式基于运行时的对象状态。
所以,我的问题是:有没有办法让...
class MyClass
{
public:
int MyMethod (/*Some Cool Args*/)
{
//do something in consideration to the current object state
}
}
基本上我的意思是,如果可以在同一个类中实现多态行为,而不必调用派生对象或使用指向成员方法的指针或具有ifs或switch的序列
答案 0 :(得分:2)
我认为你描述的案例对多态性来说并不是一个很好的例子。我认为你应该考虑使用Composition和Strategy模式。
这个概念是在函数或可调用对象中封装一些工作或算法的地方,你有几个,然后根据父状态选择使用哪一个。您可以在std :: function中保存对指针或可调用对象(仿函数)的引用,该函数可以是父类的成员。
或者,更简单地说,如果系统没有调用这种复杂性,那么你有成员函数,它们包含解析新输入的每个方法,并选择与if语句一起使用的方法。