В настоящее время я пытаюсь создать функцию-член, которая добавляет объект, Fraction f, к текущему объекту и возвращает ссылку на текущий объект. моя вторая функция — вспомогательный оператор, не являющийся другом, который добавляет два объекта Fraction и возвращает копию результата. Я не совсем уверен, как это сделать, и искал несколько советов. В значительной степени объект (ы) — это просто дроби, которые были упрощены ранее в предыдущей функции-члене. По сути, все, что я делаю, это добавление упрощенных дробей. Вот что у меня так далеко:
//header.h
class Fraction {
int num;
int den;
public:
Fraction();
Fraction(int, int);
Fraction& operator+=(const Fraction& f);
friend bool operator==(const Fraction&, const Fraction&);
void simplify();
void display() const;
};
Fraction operator+(const Fraction&, const Fraction&);
и модуль:
//module.cpp
#include "Fraction.h"#include <iostream>Fraction::Fraction() {
num = 0;
den = 0;
}
Fraction::Fraction(int n, int d) {
num = n;
den = d;
simplify();
}
void Fraction::simplify() {
int temp = den;
int a = num;
int b = den;
int gcd;
if (b > a) {
b = num;
a = den;
}
while (temp != 0) {
temp = a % b;
a = b;
b = temp;
}
gcd = a;
num /= gcd;
den /= gcd;
}
void Fraction::display() const {
std::cout << num << "/" << den << std::endl;
}
//member function in question
Fraction& Fraction::operator+=(const Fraction& f) {
num += f.num;
den += f.den;
return *this;
}
//member function in question
Fraction operator+(const Fraction&, const Fraction&) {
}
РЕДАКТИРОВАТЬ: думаю, я не был так ясен ранее, и это отчасти из-за того, что вспомогательная функция не раскрывается. Я попытался определить функцию-член, и приведенный выше код в настоящее время является тем, что у меня есть на данный момент. Я не уверен, логично ли это или нет, так как я все еще прохожу другие определения. Оператор, не являющийся другом, — тот, на которого я нахожусь в тупике и не знаю, что делать. Если бы я мог получить некоторую помощь о том, правильное ли у меня определение для оператора + = member и несколько советов о том, как подходить к оператору, не являющемуся другом, это было бы здорово. извините за путаницу.
поскольку у вас есть упрощенные дроби, все, что вам нужно сделать, это использовать это уравнение:
и код будет следующим:
Fraction& Fraction::operator+=(const Fraction& f) {
num = num * f.den + f.num * den;
den *= f.den;
simplify();
return * this;
}
РЕДАКТИРОВАТЬ:
Взгляни на этот вопрос больше о перегрузке оператора
Других решений пока нет …