C++ 通过重载+添加分数;运算符使用具有私有数据成员的类

C++ 通过重载+添加分数;运算符使用具有私有数据成员的类,c++,class,operator-overloading,private-members,fractions,C++,Class,Operator Overloading,Private Members,Fractions,首先,这是一个家庭作业。我只是需要一些帮助 解决与分数运算符+()函数相关的问题。在函数BinaryMathTest中,应该将数组中的两个分数相加,但是分数::运算符+()函数只返回分母 #include <iostream> #include <string> using namespace std; class Fraction { private: int num,denom; public: Fraction operat

首先,这是一个家庭作业。我只是需要一些帮助 解决与分数运算符+()函数相关的问题。在函数BinaryMathTest中,应该将数组中的两个分数相加,但是分数::运算符+()函数只返回分母

#include <iostream>
#include <string>

using namespace std;



class Fraction
{
    private:
    int num,denom;
    public:

    Fraction operator + (const Fraction &right)const;

    friend ostream&operator<<(ostream&stream,Fraction obj);
    Fraction(int a=0,int b=1){num=a; denom=b;}

};

ostream&operator<<(ostream&stream,Fraction obj)
{
    stream<<obj.num<<'/';
   stream<<obj.denom;
   return stream;
}

Fraction Fraction::operator+(const Fraction &right)const
{
    Fraction temp;
    Fraction tempo;
    Fraction full;
    temp.num = ((num*right.denom) + (right.num*denom));
    tempo.denom =(denom*right.denom);
    full = (temp,tempo);
    return full;
}


void BinaryMathTest();


int main()
{

    BinaryMathTest();

    return 0;
}



void BinaryMathTest()
{
    cout << "\n----- Testing binary arithmetic between Fractions\n";

    const Fraction fr[] = {Fraction(1, 6), Fraction(1,3),
                       Fraction(-2,3), Fraction(5), Fraction(-4,3)};

    for (int i = 0; i < 4; i++) {
          cout << fr[i] << " + " << fr[i+1] << " = " << fr[i] + fr[i+1]
<<endl;}}



/* OUTPUT
----- Testing binary arithmetic between Fractions
1/6 + 1/3 = 0/18
1/3 + -2/3 = 0/9
-2/3 + 5/1 = 0/3
5/1 + -4/3 = 0/3
*/
#包括
#包括
使用名称空间std;
类分数
{
私人:
int num,denom;
公众:
分数运算符+(常数分数&右)常数;
friend ostream&运营商
分数::运算符+()函数只返回分母

#include <iostream>
#include <string>

using namespace std;



class Fraction
{
    private:
    int num,denom;
    public:

    Fraction operator + (const Fraction &right)const;

    friend ostream&operator<<(ostream&stream,Fraction obj);
    Fraction(int a=0,int b=1){num=a; denom=b;}

};

ostream&operator<<(ostream&stream,Fraction obj)
{
    stream<<obj.num<<'/';
   stream<<obj.denom;
   return stream;
}

Fraction Fraction::operator+(const Fraction &right)const
{
    Fraction temp;
    Fraction tempo;
    Fraction full;
    temp.num = ((num*right.denom) + (right.num*denom));
    tempo.denom =(denom*right.denom);
    full = (temp,tempo);
    return full;
}


void BinaryMathTest();


int main()
{

    BinaryMathTest();

    return 0;
}



void BinaryMathTest()
{
    cout << "\n----- Testing binary arithmetic between Fractions\n";

    const Fraction fr[] = {Fraction(1, 6), Fraction(1,3),
                       Fraction(-2,3), Fraction(5), Fraction(-4,3)};

    for (int i = 0; i < 4; i++) {
          cout << fr[i] << " + " << fr[i+1] << " = " << fr[i] + fr[i+1]
<<endl;}}



/* OUTPUT
----- Testing binary arithmetic between Fractions
1/6 + 1/3 = 0/18
1/3 + -2/3 = 0/9
-2/3 + 5/1 = 0/3
5/1 + -4/3 = 0/3
*/
让我们按照该函数中的代码行进行操作,看看会发生什么

Fraction temp;  // Creates an object with num = 0, denom = 1
Fraction tempo; //    ditto
Fraction full;  //    ditoo

temp.num = ((num*right.denom) + (right.num*denom)); // Sets the num of temp

tempo.denom =(denom*right.denom);  // Sets the denom of tempo
我觉得你不知道下一行会发生什么

full = (temp,tempo);
行的RHS是使用的表达式

它计算
temp
并丢弃该值。它计算
tempo
并将其分配给
full
。在该行之后,
full
只有分母,因为
tempo
的分子从未从
0
更改

// Returns an object whose numerator is zero.
return full;
您可以将该函数简化为:

Fraction Fraction::operator+(const Fraction &right)const
{
   int num = ((num*right.denom) + (right.num*denom));
   int denom = (denom*right.denom);

   return Fraction(num, denom);
}
在上述实现中需要注意的一点是,如果继续添加
Fraction
对象,它将快速增加
num
denom
的值。您可以延迟/防止整数溢出,您必须将
num
denom
的值除以它们的值,以减小它们

分数::运算符+()函数只返回分母

#include <iostream>
#include <string>

using namespace std;



class Fraction
{
    private:
    int num,denom;
    public:

    Fraction operator + (const Fraction &right)const;

    friend ostream&operator<<(ostream&stream,Fraction obj);
    Fraction(int a=0,int b=1){num=a; denom=b;}

};

ostream&operator<<(ostream&stream,Fraction obj)
{
    stream<<obj.num<<'/';
   stream<<obj.denom;
   return stream;
}

Fraction Fraction::operator+(const Fraction &right)const
{
    Fraction temp;
    Fraction tempo;
    Fraction full;
    temp.num = ((num*right.denom) + (right.num*denom));
    tempo.denom =(denom*right.denom);
    full = (temp,tempo);
    return full;
}


void BinaryMathTest();


int main()
{

    BinaryMathTest();

    return 0;
}



void BinaryMathTest()
{
    cout << "\n----- Testing binary arithmetic between Fractions\n";

    const Fraction fr[] = {Fraction(1, 6), Fraction(1,3),
                       Fraction(-2,3), Fraction(5), Fraction(-4,3)};

    for (int i = 0; i < 4; i++) {
          cout << fr[i] << " + " << fr[i+1] << " = " << fr[i] + fr[i+1]
<<endl;}}



/* OUTPUT
----- Testing binary arithmetic between Fractions
1/6 + 1/3 = 0/18
1/3 + -2/3 = 0/9
-2/3 + 5/1 = 0/3
5/1 + -4/3 = 0/3
*/
让我们按照该函数中的代码行进行操作,看看会发生什么

Fraction temp;  // Creates an object with num = 0, denom = 1
Fraction tempo; //    ditto
Fraction full;  //    ditoo

temp.num = ((num*right.denom) + (right.num*denom)); // Sets the num of temp

tempo.denom =(denom*right.denom);  // Sets the denom of tempo
我觉得你不知道下一行会发生什么

full = (temp,tempo);
行的RHS是使用的表达式

它计算
temp
并丢弃该值。它计算
tempo
并将其分配给
full
。在该行之后,
full
只有分母,因为
tempo
的分子从未从
0
更改

// Returns an object whose numerator is zero.
return full;
您可以将该函数简化为:

Fraction Fraction::operator+(const Fraction &right)const
{
   int num = ((num*right.denom) + (right.num*denom));
   int denom = (denom*right.denom);

   return Fraction(num, denom);
}
在上述实现中需要注意的一点是,如果继续添加
Fraction
对象,它将快速增加
num
denom
的值。您可以延迟/防止整数溢出,您必须将
num
denom
的值除以它们的值,以减小它们

#包括
#包括
使用名称空间std;
类分数
{
私人:
int num,denom;
满浮;
公众:
分数运算符+(常数分数&右)常数;
friend ostream&operator
#包括
#包括
使用名称空间std;
类分数
{
私人:
int num,denom;
满浮;
公众:
分数运算符+(常数分数&右)常数;
friend ostream&运营商