C++运算符重载 类型不匹配问题

// 重载输入运算符1
istream& operator >> (istream& in, RationalNumber& x)
{
	in >> x.numerator >> x.denominator;
	return in;
}


// 重载输入运算符2
istream& operator >> (istream& in, RationalNumber& x)
{
	in >> x.getNumerator() >> x.getDenominator();
	return in;
}
// 有理数类
class RationalNumber {
private:
	int numerator;    // 分子
	int denominator;  // 分母
public:
	// 列表初始化[初值列]
	RationalNumber();
	RationalNumber(int , int);
	void reSet(int, int);              // 有理数重赋值
	void print();                      // 输出函数	
	int getNumerator() 
	{
		return numerator;
	}
	int getDenominator() 
	{
		return denominator;
	}
};

----------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------

如题VS2017:

输入运算符1可以匹配但是输入运算符2不能匹配,这是什么原因呢,,,

int &_Val 又是什么意思呢,,,

重载为友元函数,注意分清ostream和istream

class RationalNumber {
private:
    int numerator;    // 分子
    int denominator;  // 分母
public:
    // 列表初始化[初值列]
    RationalNumber();
    RationalNumber(int, int);
    void reSet(int, int);              // 有理数重赋值
    void print();                      // 输出函数    
    int getNumerator()
    {
        return numerator;
    }
    int getDenominator()
    {
        return denominator;
    }
    // 重载输入运算符1
    friend istream& operator >> (istream& in, RationalNumber& x)
    {
        in >> x.numerator >> x.denominator;
        return in;
    }

    // 重载输入运算符2
    friend  ostream& operator << (ostream& out, RationalNumber& x)
    {
        out << x.getNumerator() << x.getDenominator();
        return out;
    }
};

 

输入流 友元函数可以直接将numerator赋值,getNumerator()只是一个 int 类型且无法赋值。。? 

输出流 只是输出不会出错。。。

没看懂。。。你的重载函数是写在那个位置的,是都在class里边么。。。