C ++ сравнивает два объекта - PullRequest
       43

C ++ сравнивает два объекта

0 голосов
/ 27 августа 2011

Я получил эту функцию:

bool operator==(const foo& foo1, const foo& foo2)

как мне сравнить два объекта друг с другом, есть ли библиотечная функция, которая позволяет мне делать это?или мне нужно физически сравнить каждую из переменных внутри объектов.

РЕДАКТИРОВАТЬ:

foo объект содержит:

private: 
int *values;
size_t *columns; 
std::map< size_t, std::pair<size_t, unsigned int> > maps;

Ответы [ 5 ]

5 голосов
/ 27 августа 2011

Семантика функции сравнения зависит от вашего намерения, а также от характера и семантики внутренних объектов объекта.В вашем случае только вы знаете, что такое foo, и, следовательно, только вы знаете, как правильно сравнить один foo объект с другим foo объектом.На ваш вопрос нет универсального универсального ответа.

2 голосов
/ 27 августа 2011

Вы должны пройти и сравнить переменные внутри себя.

Таким образом, вы определяете, что такое равенство.Если foo представляет человека, вы можете определить два foo как равные только по имени, или по имени и фамилии, или по номеру социального страхования, или как хотите.Только вы, как писатель класса, знаете, что значит, что два ваших объекта равны.

0 голосов
/ 23 июля 2014
bool operator ==(const Student &first, const Student &second)
{
    return (first.rollno == second.rollno && first.str == second.str);
}

class Student
{
public:
    string str;
    int rollno;

    Student(string str1,int rollno1)
    {
        str=str1;
        rollno1=rollno;
    }
};

cout <<"is s1=s2? \n" << boolalpha << operator==(s1,s2) <<endl;
0 голосов
/ 27 августа 2011

Ваша подпись перегруженного оператора предназначена для статической функции, определенной вне класса foo. Поскольку вы заявили, что элементы данных foo объявлены как private, вам будет непросто заставить вашего оператора работать.

Если вам необходимо использовать эту подпись для домашней работы, вам нужно исследовать ключевое слово friend ... в конце концов, это - это домашняя работа, никто не сделает ее за вас.

Если нет, рассмотрите возможность включения оператора в класс foo. Этот - отличный общий справочник по перегрузке операторов.

0 голосов
/ 27 августа 2011

Это зависит от класса foo и от того, какие члены данных у него есть, и какое равенство vaild. Представьте, что вы foo это следующее:

class foo {
private:
    long id;
    ...
};

Если вы хотите сравнить на основе поля id:

bool operator==(const foo& foo1, const foo& foo2) { return foo1.id == foo2.id; }

Они могут быть такими простыми или сложными, как того требуют ваши потребности.

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