簡體   English   中英

C ++中的分數添加

[英]Fraction addition in 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;
    }
}

它設法接受用戶輸入。 但是,它不會打印出結果。 提前致謝。

可能還有其他問題,但Fraction::to_string()函數顯然是錯誤的: return表達式中的類型是intchar const*int 添加這些的結果是char const* ,但是如果字符串文字只有兩個字符長,如果兩個int的總和大於2,則表示未定義的行為。 您需要先將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*進行隱式轉換。

您在to_string方法中使用文字( "/" )和int之間的“+”運算符編譯器嘗試進行一些隱式轉換,最后得到一個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/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM