[英]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
表達式中的類型是int
, char 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.