3

所以基本上我正在尝试做一个分数类。它将从用户输入中获取分数并执行加法。例如,我输入 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;
    }
}

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

4

2 回答 2

5

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

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

通常,当您误用这样的类型时,会出现编译器错误,但由于历史原因:字符串文字有 type char const[],而不是std::string; char const[] 几乎所有地方都转换为char const*; C++ 支持向指针添加整数值;并且 std::string 有一个构造函数,它从char const*.

于 2013-07-12T08:29:03.013 回答
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/

于 2013-07-12T08:40:48.477 回答