недоразумение по поводу определения оператора c ++ - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь понять, почему оператор (<), определенный для этого класса, не выполняется при вызове: </p>

//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 голосов
/ 24 октября 2018

Вы сравниваете указатели с A, а не с экземплярами A в этом выражении

int res=obj1<obj2; 

Вы должны сравнить так:

int res=*obj1< *obj2; 

Вы также должны удалитьпамять, выделенная в конце программы.

delete obj1;
delete obj2;
0 голосов
/ 24 октября 2018

obj1 и obj2 являются A*, а не A, поэтому все, что вы делаете, это сравниваете адреса указателей.Если вы хотите использовать A::operator<, вам нужно разыменовать ваши указатели

*obj1 < *obj2

Кроме того, зачем вам operator< возвращать int?Он должен вернуть bool.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...