我正在尝试创建一个通用类,该类可以根据通用类的输入返回另一个类的对象。
从主函数中,如果我将'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;
}
答案 0 :(得分:1)
在var animation = bodymovin.loadAnimation({
container: document.getElementById('bm'),
renderer: 'svg',
loop: true,
autoplay: true,
path: 'data.json',
rendererSettings: {
scaleMode: 'noScale'
}
})
中将print
虚拟化。
非虚拟方法不会表现出多态性。