2013-11-27 2 views
1

Я создал класс Fraction в C++, который хранит числитель и знаменатель дроби и имеет различные методы для работы с этими числами. Как сравнить содержимое одного объекта с другим? Моя мысль заключалась в том, чтобы передать указатель на второй объект методу первого объекта, который выполняет сравнение. Любая помощь приветствуется.Как сравнить переменные-члены двух объектов в C++?

+0

Вам не нравится прототип оператора сравнения [_standard_] (http://stackoverflow.com/questions/13829704/overloading-the-comparison-operators-c) со ссылкой на оба объекта? –

+0

Вы можете написать свою собственную функцию перегрузки оператора «==» для сравнения двух объектов –

+2

, пожалуйста, не перегружайте оператор присваивания для сравнения. – clcto

ответ

3

Вы должны просто перегрузить == operator.

3

Вы можете перегрузить оператор ==, как это:

bool operator==(const Fraction &left, const Fraction &right) { 
    // Warning: this check is oversimplified; it may overflow! 
    return left.num*right.denom == right.num*left.denom; 
} 

Теперь вы можете сделать это:

Fraction a(10, 20); 
Fraction b(2, 4); 
if (a == b) { 
    ... 
} 

Общих сведения о перегрузке операторов: link.

+0

Другое предложение - использовать метод 'bool operator == (const Fraction & other)', определенный в классе. –

+0

@ThomasMatthews Хотя перегрузка оператора-члена '==' является допустимой альтернативой, я предпочитаю использовать не-членную версию оператора '==', потому что он более «симметричен». – dasblinkenlight

1

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

Operator overloading

Если, однако, вы хотите, чтобы сравнить объекты разных типов, то у вас есть несколько вариантов. Вы можете реализовать методы доступа («getters») и использовать их в методе сравнения, вы можете изменить права доступа к этим переменным (не рекомендуется), или вы можете использовать ключевое слово friend, но используйте его экономно.

When should you use 'friend' in C++?

2

Посмотрите на это. Operator overloading

Я рекомендую вам объявить и определить соответствующие перегруженные операторы. Ответы по вышеуказанной ссылке дают вам указания о том, как это сделать. Это позволит вам использовать операторов в экземплярах классов (объектов) с тем же естественным синтаксисом, который вы использовали бы для встроенных типов.

Смежные вопросы