在运行时c ++重写相同的类方法

时间:2017-08-30 23:32:07

标签: c++

说我在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的序列

1 个答案:

答案 0 :(得分:2)

我认为你描述的案例对多态性来说并不是一个很好的例子。我认为你应该考虑使用Composition和Strategy模式。

这个概念是在函数或可调用对象中封装一些工作或算法的地方,你有几个,然后根据父状态选择使用哪一个。您可以在std :: function中保存对指针或可调用对象(仿函数)的引用,该函数可以是父类的成员。

或者,更简单地说,如果系统没有调用这种复杂性,那么你有成员函数,它们包含解析新输入的每个方法,并选择与if语句一起使用的方法。