如何从模板类继承c++

How to inherit from Template class C++

本文关键字:继承 c++      更新时间:2023-10-16

对于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; }
 }