如何在构造函数中使用toString函数 [英] How do I use the toString function in constructors
问题描述
大家好。我正在尝试编写一个使用toString函数显示分数的程序。我让用户输入分子和分母,然后显示分数。如果用户没有输入任何内容,我将0/1显示为我的默认分数。我的toString函数有问题,似乎无法理解我得到的错误。请查看我的代码,并指出/修改错误。我不能够感谢你:)
Hello, everyone. I am trying to write a program that displays fraction using toString function. i let the user enter a numerator and a denominator and i display the fraction. if the user does not input anything, i display 0/1 as my default fraction. i am having trouble with my toString function and cannot seem to understand the error that i am getting. Please have a look at my code, and point out/revise the errors. i cannot thank you enough :)
#include <iostream>
#include <string>
#include<sstream>
using namespace std;
class Fractions {
int num,den;
public:
Fractions ();
Fractions (int,int);
int set_numerator(int num);
int set_denominator(int denom);
string toString();
};
Fractions::Fractions() {
num= 0;
den = 1;
int set_numerator(0);
int set_denominator(1);
}
Fractions::Fractions(int a, int b) {
int set_numerator(a);
int set_denominator(b);
}
int Fractions::set_numerator(int n)
{
num = n;
}
int Fractions::set_denominator(int d)
{
if (d=0){
cout << "YOU CAN NOT DIVIDE BY ZERO" << endl;
den== 1;
}
else
den = d;
}
static string toString(int num,int den){
stringstream s1,s2;
s1<<num;
s2<<den;
return s1.str()+"/"+s2.str();
}
int main () {
int a,b;
Fractions f1;
Fractions f2(a,b);
cout<<"Enter a numerator:"<<endl;
cin>>a;
cout<<"Enter a denominator:"<<endl;
cin>>b;
if(b==0){
cout<<"Default Fraction: "<<f1.toString()<<endl;
}
else{
f2.set_numerator(a);
f2.set_denominator(b);
cout<<"Your Fraction: "<<f2.toString()<<endl;
}
return 0;
}
推荐答案
不幸的是,您的代码存在许多错误。尝试
Unfortunately your code features many errors. Try
#include <iostream>
#include <string>
#include <sstream>
#include <stdexcept>
using namespace std;
class Fractions {
int num,den;
public:
Fractions ();
Fractions (int,int);
void set_numerator(int num);
void set_denominator(int denom);
string toString();
};
Fractions::Fractions():Fractions(0,1){}
Fractions::Fractions(int a, int b)
{
if ( b == 0) throw logic_error("invalid argument for denominator");
num = a, den = b;
}
void Fractions::set_numerator(int n)
{
num = n;
}
void Fractions::set_denominator(int d)
{
if ( d == 0) throw logic_error("invalid argument for denominator");
den = d;
}
string Fractions::toString()
{
stringstream s;
s << num << "/" << den;
return s.str();
}
int main ()
{
int a,b;
Fractions f1;
cout<<"Enter a numerator:"<<endl;
cin>>a;
cout<<"Enter a denominator:"<<endl;
cin>>b;
Fractions f2(a,b);
cout << "f1 " << f1.toString() << endl;;
cout << "f2 " << f2.toString() << endl;
}
我的C ++有点生疏,但这看起来像教学时刻。
提示1:static关键字对成员函数的作用是什么?
提示2:签名差异如何影响成员函数调用?
如果你能回答这些问题,你应该能够看到问题。
My C++ is a little rusty, but this looks like a teaching moment.
Hint 1: What does the static keyword do to a member function?
Hint 2: How do signature differences affect member function calls?
When you can answer these questions, you should be able to see the problem.
cout<<"Default Fraction: "<<f1.toString()<<endl;
查看 toString
的定义;它是 Fractions
类的成员吗?另请参见 https://msdn.microsoft.com/en-us/library/s1sb61xd.aspx [ ^ ]。
Look at your definition of toString
; is it a member of the Fractions
class? See also https://msdn.microsoft.com/en-us/library/s1sb61xd.aspx[^].
这篇关于如何在构造函数中使用toString函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!