我必须编写一个类模板arrayPlus,其中对象是类型T的数组。
运算符==必须重载,这样类的两个对象在它们属于相同类型时相等,否则返回false。
我已经重载了它,但是它似乎只在相同类型的数据上定义。我如何定义它,使它在不同数据类型的数组上工作?
下面是类模板的代码(包括运算符重载)
#include <typeinfo>
using namespace std;
template<class T> class arrayPlus {
T* type;
int nbElem;
public:
arrayPlus(int n) {
nbElem = n;
type = new T[nbElem];
};
bool operator == (arrayPlus& const obj) {
return (typeid(this->type) != typeid(obj.type));
}
};
而且,总的来说,这段代码必须编译并返回false
int main(){
#include <iostream>
#include <typeinfo>
#include "arrayPlus.h"
using namespace std;
int main() {
arrayPlus<bool> arrBool(3);
arrayPlus<int> arrInt(3);
arrBool == arrInt;//<-- error
}
在==语句处出错
no operator "==" match these operands
operand types are: arrayPlus<bool> == arrayPlus<int>
2条答案
按热度按时间0yycz8jy1#
正如在评论中提到的,你应该注意到
tableauPlus<bool>
和tableauPlus<int>
是两个不同的类型。而且你的operator==
只能比较tableauPlus<T>
和tableauPlus<T>
。请注意,当你在
tebleauPlus<T>
的定义中写入tablaeuPlus
时,它实际上是指tableauPlus<T>
。这只是一种简化的方法。你的bool operator == (tableauPlus const&);
实际上是bool operator == (tableauPlus<T> const&);
。您希望模板化的
operator==
能够将tableauPlus<T>
与tableuPlus<U>
进行比较。作为非成员:
wqsoz72f2#
对于injected class name,您只能定义两个操作数类型相同的
operator ==
:你需要额外的负荷:
你现有的超负荷