現在、Fraction f というオブジェクトを現在のオブジェクトに追加し、現在のオブジェクトへの参照を返すメンバー関数を作成しようとしています。2 番目の関数は、2 つの 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&) {
}
編集:以前はそれほど明確ではなかったと思いますが、それはヘルパー関数が明らかにされていないことが原因の 1 つです。メンバー関数を定義しようとしましたが、上記のコードは現在私が持っているものです。私はまだ他の定義を検討しているので、それが論理的に正しいかどうかはわかりません. 非友人ヘルパーオペレーターは、私が困惑しているものであり、何をすべきかわかりません。+= メンバー演算子の定義が正しいかどうか、および非フレンド ヘルパー演算子にアプローチする方法についてアドバイスを得ることができれば、それは素晴らしいことです。混乱して申し訳ありません。