C ++中的分数添加

时间:2013-07-12 08:16:55

标签: c++

所以基本上我正在尝试做一个分数类。它将从用户输入中获取分数并执行添加。例如,我输入1 5和1 7,添加它将打印出12/35 这是我的 .h 类:

#include <string>
#ifndef _FRACTION_H_
#define _FRACTION_H_

using namespace std;

class Fraction
{
    public:
        Fraction();
        Fraction(int n, int d);
        int getNumerator() const;
        int getDenominator() const;
        void display();
        string to_string();
        Fraction operator+(Fraction &second);
    private:
        int numerator;
        int denominator;
};

这是我的 .cpp 文件:

#include "Fraction.h"
#include <string>
include <iostream>

using namespace std;

Fraction::Fraction(){}

Fraction::Fraction(int n, int d)
{
    this->numerator = n;
    this->denominator = d;
}

int Fraction::getNumerator() const
{
    return numerator;
}

int Fraction::getDenominator() const
{
    return denominator;
}

Fraction Fraction::operator+(Fraction &second)
{
    int n1 = getNumerator() * second.getDenominator();
    int n2 = second.getNumerator() * getDenominator();
    int d = getDenominator() * second.getDenominator();
    return Fraction(n1+n2, d);
}
string Fraction::to_string()
{
    return  (getNumerator() + "/" + getDenominator()) ;
}

这是我的主要方法:

bool get_input(Fraction &fract);

int main()
{
    Fraction fraction1, fraction2;
    if (((!get_input(fraction1)) || (!get_input(fraction2))))
    cout << "Invalid Input!" << endl;
    else 
    {
        // Test harness for Arithmetic Operator Overloading
        Fraction result = fraction1 + fraction2;
        cout << "Addition = " << result.to_string() << endl;
    }

    bool get_input(Fraction& fract)
    {
        int num, den;
        cout << "Enter numerator & denominator (separated by space)" << endl;
        cin >> num >> den;
        if (cin.fail())
        return false;
        Fraction f(num,den);
        fract = f;
        return true;
    }
}

它设法接受用户输入。但是,它不会打印出结果。提前谢谢。

2 个答案:

答案 0 :(得分:5)

可能存在其他问题,但Fraction::to_string() 函数显然是错误的:return表达式中的类型 是intchar const*int。添加这些的结果 是char const*,但只是字符串文字 两个字符长,如果两个int的总和大于 二,你有未定义的行为。您需要转换int 先串起来;最简单的方法是使用 std::ostringstream

std::string
Fraction::to_string()
{
    std::ostringstream results;
    results << numerator << '/' << denominator;
    return results.str();
}

通常,当您滥用时,会发生编译器错误 像这样的类型,但由于历史原因:字符串文字 类型char const[],而不是std::string; char const[] 几乎到处转换为char const*; C ++支持 向指针添加整数值;和std :: string有 一个构造函数,它从char const*执行隐式转换。

答案 1 :(得分:1)

您在"/"方法中的文字(int)和to_string之间使用“+”运算符 编译器正在尝试进行一些隐式转换,它以point(int + int + char *,最佳猜测是char *)结束,然后使用正确的构造函数将其转换为std :: string

更改您的方法以使用stringstream(并且您可以更好地控制格式化):

string Fraction::to_string()
{
    std::stringstream s;
    s << getNumerator() << "/" << getDenominator();
    return s.str();
}

参考:http://www.cplusplus.com/reference/sstream/stringstream/