如何从模板类继承c++
How to inherit from Template class C++
对于c++来说已经有一段时间了,我有一个类Number和几个子类,如Integer, Decimal..我想重写==运算符来比较当两个数字相等时…我有类似下面的东西,但似乎无法找出子类继承模板类的语法以及子类中重写==操作符的语法…
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; }
}
您需要指定一个专门化,如Number<int>
。否则不能从模板继承,除非派生类本身就是模板。你的代码中还有其他一些错误,比如注释中提到的错误,以及operator==
操作符,它应该把const Number<T>&
作为参数。所以在你的情况下用e.g.
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);
}
Live on Coliru
either
template<class T>
class Integer : public Number<T> {
或
class Integer : public Number<int> {
取决于你是否想让Integer
也成为模板
使用
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; }
}
相关文章:
- 继承函数的重载解析
- 继承期间显示未知行为的子类
- 头文件-继承c++
- 为什么在保护模式下继承升级不起作用
- 通过继承类使用来自不同命名空间的运算符
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 混合组合和继承的C++问题
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 从类继承时,继承的类是否会通过父类重新定义继承的变量
- 公共与私人继承
- 如何创建从同一类继承的不同对象的向量
- 如何从另一个文件继承私有成员变量和公共函数
- 在模板基类中为继承类中的可选重写生成虚拟方法
- 带有继承的C++工厂
- 我应该避免多重实现继承吗
- C++继承更改成员
- 从具有默认值的部分指定模板类继承时发生SWIG错误,具有不带默认值的正向声明
- 关于C++中具有多重继承"this"指针的说明
- 尝试使用继承和模板实现CRTP.Visual Studio正在生成编译器错误
- 如何在QT Creator上将QWidget声明为继承类的对象