添加分数和类- Woot

Adding a fractions and classes - Woot

本文关键字:Woot 添加      更新时间:2023-10-16

嘿,伙计们,我想说的是,在发布这个问题之前,我已经研究了很多类似的程序,仍然需要一些帮助。我的问题在于加法分数类函数,我需要把一个分数加到另一个分数上。我有一个类,目前正在处理该类的实例(fractionObject和fractionObject2)。我分别存储分数,一个在fractionObject中,一个在fractionObject2中。我怎么能添加这些在我的分数类函数' add '?

任何提示将不胜感激!谢谢你的时间!

#include <iostream>
#include <string>
#include <sstream>
using namespace std;
// Regular prototypes
int stringToNumber(const string &Text);
int GCD(int, int);
int LCM(int, int);
class fraction{
public: // Access Specifier
    int numerator;
    int  denominator; // Can never be 0

    // Function Prototypes
    fraction();
    void setNumDen();
    void reduce();
    void add();

};
// Member functions definitions
fraction::fraction()
{
    numerator = 0;
    denominator = 0;
}
void fraction::setNumDen()
{
    string numString;
    string denString;
    do{
        cout << "Enter a numerator and denominator of fraction 1 separated by whitespace: ";
        getline(cin, numString, ' ');
        getline(cin, denString);
        if (denString == "0")
            cout << endl << "Please enter a number that isn't zero." << endl;
    } while (denString == "0"); // Making sure denominator is not zero
    numerator = stringToNumber(numString);
    denominator = stringToNumber(denString);
}
void fraction::reduce()
{
    int leastCommonMultiple = 0;
    leastCommonMultiple = LCM(numerator, denominator);
    numerator /= leastCommonMultiple;
    denominator /= leastCommonMultiple;
}
void fraction::add()
{
    int leastComDen;
}
int main()
{
    fraction fractionObject, fractionObject2;
    fractionObject.setNumDen();
    fractionObject2.setNumDen();
    // Reducing and displaying the reduced fractions
    fractionObject.reduce();
    fractionObject2.reduce();
    cout << "Reduced Fraction 1 = " << fractionObject.numerator << "/" << fractionObject.denominator << "t" << "Reduced Fraction 2 = " << fractionObject2.numerator << "/" << fractionObject2.denominator << endl;
    // Adding and displaying the fractions

    system("pause");
    return 0;
}
// Function to convert string to number
int stringToNumber(const string &Text)//Text not by const reference so that the function can be used with a 
{                               //character array as argument
    stringstream ss(Text);
    int result;
    return ss >> result ? result : 0;
}
// result=GCD(a,b)
int LCM(int a, int b) {
    int temp = 0;
    while (b != 0) {
        temp = b;
        b = a%b;
        a = temp;
    }
    return a;
}
// result=LCM(a,b);
int GCD(int a, int b) {
    int result = 0;
    result = a * (b / LCM(a, b));
    return result;
}

这里没有完整的答案,但是add应该有两个const fraction&参数并返回一个临时的fraction对象。你可以把它重命名为operator+。许多库都添加了不需要创建临时对象的+=操作符。c++ 11允许您使用move构造函数来减少这些临时对象的开销。

至于实现,这里有一个提示:1/6 + 1/9 =(9+6)/54 = 5/18。我注意到你已经有了一个reduce函数