如何定义一些可以在(+)运算符的运算符重载范围内访问的函数?

问题描述 投票:0回答:1

我通过在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'

c++ operator-overloading c++14 operator-keyword
1个回答
1
投票

我会说int Rational::LCM(int a,int b)Rational类没有任何关系,应该是一个实用函数(非成员函数),那么你就可以在任何地方使用它了

© www.soinside.com 2019 - 2024. All rights reserved.