Как определить некоторую функцию, к которой можно получить доступ из-за перегрузки оператора для оператора (+)? - PullRequest
0 голосов
/ 24 апреля 2019

Я создал код, используя концепцию перегрузки операторов в c ++ для добавления двух рациональных чисел, перегружая операторы + (плюс) и << (вставка), и я не могу получить доступ к функции из области действияПерегрузка оператора оператора +.Как получить доступ к функции LCM () из области действия оператора + перегружен? </p>

Я пытался использовать функцию друга для доступа к моей функции 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' не был объявлен в этой области

1 Ответ

1 голос
/ 24 апреля 2019

Я бы сказал, что int Rational::LCM(int a,int b) на самом деле не имеет ничего общего с классом Rational и, вероятно, должно быть служебной функцией (не входящей в состав функции), тогда вы сможете использовать ее где угодно

...