我试图理解为什么为此类定义的运算符(<)在被调用时未执行:
//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;
}
我了解到,操作员的重新定义允许其调用。有什么帮助吗?谢谢
答案 0 :(得分:5)
obj1
和obj2
是A*
而不是A
,因此您要做的只是比较指针地址。如果要使用A::operator<
,则需要取消引用指针
*obj1 < *obj2
您为什么还要让operator<
返回int
?它应该返回bool
。
答案 1 :(得分:2)
您正在比较的是指向A
的指针,而不是此语句中A
的实例
int res=obj1<obj2;
您应该这样比较:
int res=*obj1< *obj2;
您还必须删除在程序末尾分配的内存。
delete obj1;
delete obj2;