如何重载新运算符

时间:2016-02-06 16:00:37

标签: c++ operator-overloading new-operator

我尝试重载+ =但是它给我一个错误:

  

表达式必须具有整数或未整合的枚举类型

class Sensor{};
class SensorList{
Sensor ** sensors;
};

void main(){
Sensor s1;

SensorList *list = new SensorList();
list += &s1;

}

这是+ =运算符

的重载
SensorList* operator+=(Sensor * sens){

        SensorList * lista= new SensorList();


    Sensor ** temp = new Sensor*[this->noElem];
    for (int i = 0; i < this->noElem; i++)
        temp[i] = this->senzori[i];

    delete[] this->senzori;

    this->senzori = new Sensor*[this->noElem + 1];
    for (int i = 0; i < this->noElem; i++)
        this->senzori[i] = temp[i];
    this->senzori[this->noElem] = sens;

    this->noElem += 1;

    lista = this;



        return lista;
}

我该怎么办?我必须重载新运算符吗?

1 个答案:

答案 0 :(得分:1)

然而,实际上定义了用户定义的operator+=,这两个操作数都是

list += &s1;

是指针。因此,这永远不会调用用户定义的运算符,因为所有操作数都不是classenum类型。由于语言规则,你不能为两个指针重载任何运算符。

相反,它会尝试向指针添加内容,而这只适用于积分和枚举,正如编译器告诉你的那样。

特别是,您的问题与operator new无关,而您显然甚至没有尝试重载此问题。

所以该做什么:停止通过指针执行所有操作,只是重载您的类的操作符或代替类的引用。然后你会得到这样的东西:

Sensor s1;
SensorList sl;
sl += s1;

我建议你阅读this

如果确实觉得需要使用指针(你可能不应该),请使用像

这样的免费功能
void add(SensorList*, Sensor*);