[英]C++ template and inheritance, function not replaced in derived class
在这里我附加了一个最小的情况,在子类中, cmp
将替换父类中的一个,但它不起作用,它总是调用父类中的一个
#include <iostream>
template <typename T>
class A
{
public:
void tell(T a, T b)
{
std::cout << (cmp (a, b) ? a : b) << " is better" << std::endl;
}
protected:
bool cmp (T & a, T & b)
{
return a > b;
}
};
template <typename T>
class B: public A<T>
{
protected:
bool cmp (T & a, T & b)
{
return a < b;
}
};
int main ( int argc , char **argv )
{
B<int> b;
// should be: 3 is better here
b.tell(5, 3);
return 0;
}
您必须将多态函数声明为virtual
。 否则你不会得到多态行为
virtual bool cmp (T & a, T & b)
您的cmp
函数必须在A
声明为virtual
。
protected:
virtual bool cmp (T & a, T & b)
{
return a > b;
}
它将在派生类中隐式保持虚拟,尽管为了清楚起见我也明确地在B
声明了cmp
virtual。
你应该让cmp
成为基类中的虚函数:
virtual bool cmp (T & a, T & b);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.