如何在构造函数中使用toString函数 [英] How do I use the toString function in constructors

查看:103
本文介绍了如何在构造函数中使用toString函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好。我正在尝试编写一个使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆