函数的C ++动态返回类型

时间:2018-12-26 22:53:38

标签: c++ oop c++11

我正在尝试创建一个通用类,该类可以根据通用类的输入返回另一个类的对象。

从主函数中,如果我将'1'作为参数传递给泛型类的构造函数,我希望能够使用getType()获得child1类的对象。我的问题是:有没有一种方法可以动态地更改getType()的返回类型,或者可以通过其他任何方式来实现此行为?

即使我在通用构造函数中创建子类的对象,因为m_type是基类型,我当前的实现也调用了基类的print()方法。

class base {

    public:
        void print(){
            cout << "base\n";
        }
        virtual ~base() {}
};

class child1 : public base {
    public:
        void print(){
            cout << "child1\n";
        }
};

class child2 : public base {
    public:
        void print(){
            cout << "child2\n";
        }
        void hello(){
            cout << "hello from child 2\n";
        }
};

class generic{

    public:
        generic(int b){
            if(b==1) {
                m_type = new child1();
            }
            else if(b==2) 
                m_type = new child2();
        }

    // Somehow return the object of one of the child class based on input 
    // to constructor.
    base *getType(){
        return m_type;
    }

    base *m_type;
};

int main()
{
    generic *g1 = new generic(1);
    // call the method from child1 class instead of base class.
    g1->getType()->print();
    return 0;
}

1 个答案:

答案 0 :(得分:1)

var animation = bodymovin.loadAnimation({ container: document.getElementById('bm'), renderer: 'svg', loop: true, autoplay: true, path: 'data.json', rendererSettings: { scaleMode: 'noScale' } }) 中将print虚拟化。

非虚拟方法不会表现出多态性。