关于运算符定义c的误解

时间:2018-10-24 11:48:52

标签: c++ operator-overloading

我试图理解为什么为此类定义的运算符(<)在被调用时未执行:

//File A.h (simplified class)
#ifndef __A__H
#define __A__H

#include <string>
#include <cstdlib>
#include <iostream>
using namespace std;

class A {

private:
    string _str;
    int _number;

public:
    A( string str="", int age=0): _str(str), _number(number){} //inline

    int operator < (const A &a1 ) const 
    {
        cout<<"Call of new operator <"<<endl;

        if ( _str == a1._str )
            return _number < a1._number; 
        return _str < a1._str; //here use of (<) associated to string 
     }

};
#endif

int main()
{
    A *obj1= new A("z",10);
    A *obj2= new A("b",0);
    int res=obj1<obj2; //res is equal to 1. There's no message              
                       // call of new operator"

    return 0;

} 

我了解到,操作员的重新定义允许其调用。有什么帮助吗?谢谢

2 个答案:

答案 0 :(得分:5)

obj1obj2A*而不是A,因此您要做的只是比较指针地址。如果要使用A::operator<,则需要取消引用指针

*obj1 < *obj2

您为什么还要让operator<返回int?它应该返回bool

答案 1 :(得分:2)

您正在比较的是指向A的指针,而不是此语句中A的实例

int res=obj1<obj2; 

您应该这样比较:

int res=*obj1< *obj2; 

您还必须删除在程序末尾分配的内存。

delete obj1;
delete obj2;