如何从模板类 C++ 继承

use*_*412 2 c++ inheritance operator-overloading

对于 C++ 来说已经有一段时间了,我有一个类 Number 和几个子类,如 Integer、Decimal ..我想重写 == 运算符来比较两个 nums 在数值上相等时...我有类似以下的东西,但可以'似乎找出了从模板类继承的子类的语法以及在子类中覆盖 == 运算符的语法...

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

 }
Run Code Online (Sandbox Code Playgroud)

vso*_*tco 5

您需要指定一个专业化,例如Number<int>. 否则你不能从模板继承,除非你的派生类本身就是一个模板。您的代码中还有一些其他错误,例如注释中提到的错误,以及operator==应该const Number<T>&作为参数的运算符。所以在你的情况下使用例如

class Integer : public Number<int>
Run Code Online (Sandbox Code Playgroud)

一旦你这样做了,就不再需要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);
}
Run Code Online (Sandbox Code Playgroud)

Live on Coliru