C++ 将对象int数据成员转换为浮点和除法会将奇怪的数据cout附加到控制台

C++ 将对象int数据成员转换为浮点和除法会将奇怪的数据cout附加到控制台,c++,object,math,output,C++,Object,Math,Output,我肯定我做错了什么,但我就是想不出来。我已经创建了一个包含整数数据成员的对象,我想让一个成员函数以浮点值的形式返回其成员的商,它会这样做。然后,它会附加一些额外的内容。输出低于程序,程序应按原样运行 #include <iostream> #include <string> #include <cstdlib> using namespace std; class Rational { public: explicit Rational(int =

我肯定我做错了什么,但我就是想不出来。我已经创建了一个包含整数数据成员的对象,我想让一个成员函数以浮点值的形式返回其成员的商,它会这样做。然后,它会附加一些额外的内容。输出低于程序,程序应按原样运行

#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;

class Rational
{
public:
    explicit Rational(int = 0, int = 1);
    double getRationalAsDouble() const;
private:
    int numerator;
    int denominator;
};

Rational::Rational(int numerator, int denominator)
{
    if (denominator == 0)
        this->denominator = 1;
    else
        this->denominator = denominator;
    this->numerator = numerator;
}

// *******  Problem Function *********
double Rational::getRationalAsDouble() const
{
    double a = 0.0, b = 0.0;
    a = static_cast<double>(numerator);
    b = static_cast<double>(denominator);
    cout << endl << "a = " << a;
    cout << endl << "b = " << b;
    cout << endl << "a/b = " << (a/b);
}
// ******** End Problem Function ********

int main()
{

    { //Create a new Scope so that I can view Destructor Message, not used here

        Rational c(2, 6);
        int data = 10;

        cout << c.getRationalAsDouble(); // prints rational object c as double, but not really
        cout << "\n\n";
            } // End of Scope
    return 0;
} // end main
我一直在玩,如果我把函数改成有规则的除法,它就可以正常工作了。真正有趣的是,如果我在cout三个问题之后添加任何输出:

  • 您希望在行尾打印endl,而不是在“开始”处。您的代码最终(有效地)解决了三个问题:

    • 您希望在行尾打印endl,而不是在“开始”处。您的代码最终(有效地)解决了三个问题:

      • 您希望在行尾打印endl,而不是在“开始”处。您的代码最终(有效地)解决了三个问题:


        • 您希望在行尾打印endl,而不是在“开始”处。您的代码最终(有效地)执行
          cout您的
          Rational::getRationalAsDouble()
          实现可以简化为:

          double Rational::getRationalAsDouble() const
          {
             return 1.0*numerator/denominator;
          }
          

          我认为您在那里还有其他一切用于调试目的,因此并不真正需要。

          您对
          Rational::getRationalAsDouble()
          的实现可以简化为:

          double Rational::getRationalAsDouble() const
          {
             return 1.0*numerator/denominator;
          }
          

          我认为您在那里还有其他一切用于调试目的,因此并不真正需要。

          您对
          Rational::getRationalAsDouble()
          的实现可以简化为:

          double Rational::getRationalAsDouble() const
          {
             return 1.0*numerator/denominator;
          }
          

          我认为您在那里还有其他一切用于调试目的,因此并不真正需要。

          您对
          Rational::getRationalAsDouble()
          的实现可以简化为:

          double Rational::getRationalAsDouble() const
          {
             return 1.0*numerator/denominator;
          }
          


          我认为您在那里还有其他的一切是为了调试目的,因此并不真正需要。

          推荐的链接没有回答这个问题。我将两个浮点数相除,并在最后得到期望值和附加的垃圾值。我应该看到
          a/b=0.3333333 2
          ,没有附加
          .31196e-317
          。建议的链接无法回答问题。我将两个浮点数相除,并在最后得到期望值和附加的垃圾值。我应该看到
          a/b=0.3333333 2
          ,没有附加
          .31196e-317
          。建议的链接无法回答问题。我将两个浮点数相除,并在最后得到期望值和附加的垃圾值。我应该看到
          a/b=0.3333333 2
          ,没有附加
          .31196e-317
          。建议的链接无法回答问题。我将两个浮点数相除,并在最后得到期望值和附加的垃圾值。我应该看到
          a/b=0.3333333 2
          ,但没有附加
          .31196e-317
          。谢谢!我不敢相信回归才是问题所在。我最初将其实现为
          cout static_cast(分子)/分母,但显然问题仍然存在,因为它没有返回任何内容。我使用的是Dev-C++,如果我不返回值,它不会使我感到温暖。我已经慢慢地转到VisualC++,这是更好的,但我一直有一个问题,今天,所以就回到老贝琪。再次感谢你,我感谢你的时间!您可能必须启用编译器警告。Dev-C++似乎是用GCC编译的;我建议从
          -Wall-Wextra-Wformat=2-Wno unused parameter
          开始。编译器不需要诊断缺少的返回值(通常,要准确地诊断,他们必须解决停止问题)。但是,能够在这样简单的情况下做到这一点是一个很好的QoI问题。非常好的建议,谢谢tc.,我会研究它,只要我时不时地使用Dev-C++就可以让它发现更多问题。而且,你说得很对,马特,我在发帖前挣扎了几个小时。因为这是一个退货问题,我真的很难过。谢谢你!我不敢相信回归才是问题所在。我最初将其实现为
          cout static_cast(分子)/分母,但显然问题仍然存在,因为它没有返回任何内容。我使用的是Dev-C++,如果我不返回值,它不会使我感到温暖。我已经慢慢地转到VisualC++,这是更好的,但我一直有一个问题,今天,所以就回到老贝琪。再次感谢你,我感谢你的时间!您可能必须启用编译器警告。Dev-C++似乎是用GCC编译的;我建议从
          -Wall-Wextra-Wformat=2-Wno unused parameter
          开始。编译器不需要诊断缺少的返回值(通常,要准确地诊断,他们必须解决停止问题)。但是,能够在这样简单的情况下做到这一点是一个很好的QoI问题。非常好的建议,谢谢tc.,我会研究它,只要我时不时地使用Dev-C++就可以让它发现更多问题。而且,你说得很对,马特,我在发帖前挣扎了几个小时。因为这是一个退货问题,我真的很难过。谢谢你!我不敢相信回归才是问题所在。我最初将其实现为
          cout static_cast(分子)/分母,但显然问题仍然存在,因为它没有返回任何内容。我使用的是Dev-C++,如果我不返回值,它不会使我感到温暖。我已经慢慢地转到VisualC++,这是更好的,但我一直有一个问题,今天,所以就回到老贝琪。再次感谢你,我感谢你的时间!您可能必须启用编译器警告。Dev-C++似乎是用GCC编译的;我建议将
          -Wall-Wextra-Wformat=2-Wno未使用的参数作为起点。不需要编译器来诊断MSI