C++重载(+)操作符

Eri*_*cis 2 c++ operator-overloading

我正在进行C++第498页的练习11.11,如何编写第8版.

问题是:创建一个具有以下功能的RationalNumber(fractions)类:a)创建一个构造函数,防止分数中的0分母,减少或简化非简化形式的分数并避免负分母b)重载加法此类的减法运算,乘法运算和除法运算符c)重载此类的关系运算符和相等运算符

我正在重载加法运算符.

我已经完成了一个,但我没有在任何地方超载.我已经在互联网上搜索了更好的解释,但我只是没有理解如何使用用户定义的类型重载运算符的概念.

每个RationalNumber都有一个分子和一个分母,它们组合成一个分数.我需要将它们加在一起,找到共同点,等等.

因此,我的RationalNumber.h是:

// RationalNumber.h
// RationalNumber class definition
#ifndef RATIONALNUMBER_H
#define RATIONALNUMBER_H

#include <iomanip>
#include <iostream>
#include <string>
using namespace std;

class RationalNumber
{

public:
RationalNumber( int numerator, int denominator);

void setNumerator(int numerator);
int getNumerator();

void setDenominator(int denominator);
int getDenominator();

void printRationalNumber();

RationalNumber operator+(Rationalnumber a, RationalNumber b);

private:
int numerator; //top number
int denominator; //bottom number
};

#endif
Run Code Online (Sandbox Code Playgroud)

现在,只关注我的操作符+功能:

RationalNumber RationalNumber::operator+(RationalNumber a, RationalNumber b)
{

}
Run Code Online (Sandbox Code Playgroud)

Visual Studio告诉我类Rationaloperator没有成员"operator +"

任何帮助,将不胜感激.

谢谢,埃里克

更新:

我现在有:

RationalNumber operator+(Rationalnumber a);
Run Code Online (Sandbox Code Playgroud)

RationalNumber RationalNumber::operator+(RationalNumber a)
{

}
Run Code Online (Sandbox Code Playgroud)

我收到错误:减速是不兼容的.....(<error_type> a)

Ben*_*ley 9

+是一个二元运算符.如果你使它成为一个成员,它应该只接受一个参数,因为调用对象是左操作数.

另请注意,您不必将其设为会员.我通常做的是operator+=作为成员实现,然后operator+作为利用的自由功能operator+=.这具有可以隐式转换左或右操作数的优点.例如,如果RationalNumber类具有以下隐式转换double:

RationalNumber r1,r2;
r1 = r2 + 3.14; // this will work either way
r1 = 3.14 + r2; // can't do this if operator+ is a member
Run Code Online (Sandbox Code Playgroud)

至于有关不兼容声明的错误:

RationalNumber operator+(Rationalnumber a);
                                 ^
                       Should be a capital N
Run Code Online (Sandbox Code Playgroud)