对于C ++已经有一段时间了,我有一个类Number和几个子类,比如Integer,Decimal ..我想覆盖==运算符来比较两个num在数值上相等...我有类似下面的内容,但似乎无法弄清楚从模板类继承的子类的语法以及在子类中重写==运算符的语法......
template class <T>
class Number{
T data;
Number(T num) { data = num ;}
boolean operator==(T &other){ return data == other; }
}
class Integer : public Number{
int iData;
Integer(int i) { iData = i ; }
boolean operator==(Integer &other){ return idata == other.iData; }
}
答案 0 :(得分:1)
您需要指定专门化,例如Number<int>
。否则,您无法从模板继承,除非您的派生类本身就是模板。您的代码中还有一些其他错误,例如评论中提到的错误,以及operator==
运算符,它应该将const Number<T>&
作为参数。所以在你的情况下使用例如
class Integer : public Number<int>
一旦这样做,就不再需要在派生类中实现operator==
,因为它将被继承。完整的工作代码如下:
#include <iostream>
template <class T>
class Number
{
public:
T data;
Number(T num): data(num){}
bool operator==(const Number<T> &other) { return data == other.data; }
};
class Integer : public Number<int>
{
using Number<int>::Number; // inherit the constructor
};
int main()
{
Integer i1 = 10, i2 = 20;
std::cout << std::boolalpha << (i1 == i2);
}
答案 1 :(得分:1)
或者
template<class T>
class Integer : public Number<T> {
或
class Integer : public Number<int> {
取决于您是否希望Integer
成为模板
答案 2 :(得分:1)
使用
template<class T>
class Number{
T data;
Number(T num) { data = num ;}
boolean operator==(T &other){ return data == other; }
};
template<typename T>
class Integer : public Number<T> {
int iData;
Integer(int i) { iData = i ; }
boolean operator==(Integer &other){ return idata == other.iData; }
}