【发布时间】:2015-05-07 14:38:02
【问题描述】:
我想要一个类模板,其中包含我的方法的基本实现,以及一组子类,这些子类使用具有特定类型(double、int、char*)的模板类并根据需要覆盖这些基本实现的某些子集.但是,除非我将对象声明为子类的实例,否则我的重写方法似乎不会被调用。在探索这个问题时,我想出了以下代码:
#include <iostream>
template <typename T>
class BaseClass {
public:
virtual void print1 (T thing) {
std::cout << "Base print1: " << thing << std::endl;
}
virtual void print2 (T thing) {
std::cout << "Base print2: " << thing << std::endl;
}
};
class IntClass : public BaseClass<int> {
public:
void print2 (int thing) {
std::cout << "Int print2: " << thing << std::endl;
}
};
int main()
{
BaseClass<int> thing = IntClass();
thing.print1(1);
thing.print2(1);
IntClass thing2 = IntClass();
thing2.print1(2);
thing2.print2(2);
return 0;
}
我的预期输出是:
Base print1: 1
Int print2: 1
Base print1: 2
Int print2: 2
但相反,我得到:
Base print1: 1
Base print2: 1
Base print1: 2
Int print2: 2
是否有可能在这里实现我的目标,或者在这种情况下我最好为每种类型创建单独的基类?抱歉,如果我的术语有点偏离 - 我对 C++ 比较陌生。
【问题讨论】:
标签: c++ templates polymorphism overriding