<分区>
我想要一个包含我的方法的基本实现的类模板,以及一组使用具有特定类型(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++ 的新手。