【发布时间】:2016-04-14 00:32:35
【问题描述】:
我有基本的 Parent 类和模板化的 Child 类。 我想使用集合中的 Childs 通过与父级的多态接口来枚举它们。 我希望那里有虚拟(多态)函数调用 - 但我只有对 Parent::print() 的静态类型调用
#include <iostream>
#include <vector>
using namespace std;
class Parent {
public:
Parent() { cout << " parent ctor "; }
virtual void print() { cout << " Parent::print "; }
};
template <typename T>
class Child : public Parent {
public:
Child(T value) : var(value) { cout << " child ctor "; }
virtual void print() { cout << " Child::print " << var; }
protected:
T var;
};
int main() {
Child<int> myChild(1);
Child<double> myDoubleChild(2.);
vector<Parent> v = {myChild, myDoubleChild};
for (auto i : v) {
i.print();
}
return 0;
}
实际输出:
parent ctor child ctor parent ctor child ctor Parent::print Parent::print
预期输出应包含“Child::print”虚函数调用
【问题讨论】:
标签: c++ templates polymorphism virtual