我通过在c ++中使用运算符重载概念创建了一个代码,通过重载+(加号)和<<(插入)运算符来添加两个有理数,并且我无法从运算符重载的范围中获取函数。 +运算符。如何从operator + overload的范围访问LCM()函数?
我尝试使用friend函数从operator +重载函数的范围内访问我的LCM()函数,但它不起作用!
#include <iostream>
using namespace std;
class Rational {
private:
int num, den;
public:
int getnum()
{
return this->num;
}
int getden()
{
return this->den;
}
Rational(int num = 0, int den = 0)
{
this->num = num;
this->den = den;
}
int LCM(int a, int b);
friend ostream& operator<<(ostream& out, Rational& r);
friend Rational operator+(Rational x, Rational y);
};
int Rational::LCM(int a, int b)
{
int i = a > b ? a : b;
for (i; i <= a * b; i++) {
if (i % a == 0 && i % b == 0) {
break;
}
}
return i;
}
ostream& operator<<(ostream& out, Rational& r)
{
out << r.getnum() << "/" << r.getden();
return out;
}
Rational operator+(Rational x, Rational y)
{
Rational temp;
int temp1;
int div;
temp1 = LCM(x.den, y.den);
temp.num = (int(temp1 / x.den) * x.num) + (int(temp1 / y.den) * y.num);
temp.den = temp1;
return temp;
}
int main()
{
Rational r1(3, 2);
Rational r2(9, 4);
Rational r3;
r3 = r1 + r2;
cout << r3;
return 0;
}
我收到错误:
错误:未在此范围内声明'LCM'
我会说int Rational::LCM(int a,int b)
与Rational
类没有任何关系,应该是一个实用函数(非成员函数),那么你就可以在任何地方使用它了