1

以下のコードに問題があります。現在、関数を実行していません...加算も減算も除算も乗算もしていません。

どんな助けでもありがたいです...私はそれを理解してそれを乗り越えることができるように説明が必要です:D

#include <iostream>
using namespace std;

// Class Definitions

class RationalNumber
{
public:
     RationalNumber(int, int, int, int);                    
     RationalNumber operator+(RationalNumber);
     RationalNumber operator-(RationalNumber);
     RationalNumber operator*(RationalNumber);
     RationalNumber operator/(RationalNumber);
     RationalNumber operator<(RationalNumber);
     RationalNumber operator>(RationalNumber);
     RationalNumber operator<=(RationalNumber);
     RationalNumber operator>=(RationalNumber);
     RationalNumber operator==(RationalNumber);
     RationalNumber operator!=(RationalNumber);
private:
     int numerator;
     int denominator;
     int numerator2;
     int denominator2;

};  // end RationalNumber class


// RationalNumber class member-function definitions
RationalNumber::RationalNumber(int num, int denom, int num2, int denom2)
{
     numerator = num;
     denominator = denom;
     numerator2 = num2;
     denominator2 = denom2;

//for first fraction
     if (denominator == 0 || denominator < 0)
          cout << "ERROR:Denominator can not be zero or less than zero." << "\n";

     else
          //Reduces the fraction to lowest terms.
     {
          int i = numerator > denominator ? numerator : denominator;

          while(i > 1)
          {
               if(numerator % i == 0 && denominator % i == 0)  
               {
               numerator /= i;
               denominator /= i;
               }
               --i;
          }

     }

     cout << "Simplified fraction one is: " << numerator << " / "
        << denominator << "\n";

//For second fraction
     if (denominator2 == 0 || denominator2 < 0)
          cout << "ERROR:Denominator can not be zero or less than zero" << "\n";
     else
          //Reduces the fraction to lowest terms.
     {
          int j = numerator2 > denominator2 ? numerator2 : denominator2;

          while(j > 1)
          {
               if(numerator2 % j == 0 && denominator2 % j == 0)  
               {
               numerator2 /= j;
               denominator2 /= j;
               }
               --j;
          }

     }
     cout << "Simplified fraction two is: " << numerator2 << " / "
        << denominator2 << "\n";

}

// addition operator
RationalNumber RationalNumber::operator+(RationalNumber a)
{
      RationalNumber temp=RationalNumber(1,2,3,4);
      temp.numerator = numerator + a.numerator;
      temp.denominator = denominator + a.denominator;
      temp.numerator2 = numerator2 + a.numerator2;
      temp.denominator2 = denominator2 + a.denominator2;
      return temp;
}

// subtraction operator
RationalNumber RationalNumber::operator-(RationalNumber a)
{
     RationalNumber temp=RationalNumber(1,2,3,4);
      temp.numerator = numerator - a.numerator;
      temp.denominator = denominator - a.denominator;
      temp.numerator2 = numerator2 - a.numerator2;
      temp.denominator2 = denominator2 - a.denominator2;
      return temp;
}

// multiplication operator
RationalNumber RationalNumber::operator*(RationalNumber a)
{
      RationalNumber temp=RationalNumber(1,2,3,4);
      temp.numerator = numerator * a.numerator;
      temp.denominator = denominator * a.denominator;
      temp.numerator2 = numerator2 * a.numerator2;
      temp.denominator2 = denominator2 * a.denominator2;
      return temp;
}

// division operator
RationalNumber RationalNumber::operator/(RationalNumber a)
{
      RationalNumber temp=RationalNumber(1,2,3,4);
      temp.numerator = numerator / a.numerator;
      temp.denominator = denominator / a.denominator;
      temp.numerator2 = numerator2 / a.numerator2;
      temp.denominator2 = denominator2 / a.denominator2;
      return temp;
}

int main()
{

     int top;
     int bot;
     int top2;
     int bot2;

     cout << "Please enter the Numerator for fraction one: \n";
     cin >> top;
     cout << "Please enter the Denominator for fraction one: \n";
     cin >> bot;
     cout << "Please enter the Numerator for fraction two: \n";
     cin >> top2;
     cout << "Please enter the Denominator for fraction two: \n";
     cin >> bot2;

     RationalNumber A(top, bot, top2, bot2);
     return 0;

}
4

5 に答える 5

4

を宣言RationalNumber(int, int, int, int)すると、デフォルトのコンストラクターが自動的に削除されます。つまり、パラメーターなしでコンストラクターを呼び出してクラスのインスタンスを作成することはできなくなります。

言い換えると、

RationalNumber number;

もはや不可能です。あなたは言う必要があるでしょう

RationalNumber number(1,2,3,4);

デフォルトのコンストラクターを使用してインスタンスを作成できるようにする場合は、他のコンストラクターに加えて1つを定義する必要があります。

RationalNumber()
{
    // Initialization
}
于 2010-11-27T03:56:21.470 に答える
1

次のように演算子を再定義します。

RationalNumber RationalNumber::operator+(RationalNumber a)
{
      return RationalNumber(
          numerator + a.numerator,
          denominator + a.denominator,
          numerator2 + a.numerator2,
          denominator2 + a.denominator2);
}

これにより、悲しみの原因となるパラメーターなしの一時的な作成が回避されます。また、コンパイラが戻り値の最適化 (RVO) を利用するのにも役立ちます。

于 2010-11-27T03:58:58.250 に答える
1

ちょっと撮ってみます…</p>

#include <utility>

struct ratio {
    int numerator;
    int denominator;

    explicit ratio( int n = 0, int d = 1 )
        : numerator( n ), denominator( d ) { }

    ratio operator - () const {
        ratio x( * this );
        x.numerator = - x.numerator;
        return x;
    }

    ratio operator + () const
        { return *this; }
};

void reduce( ratio &x ) {
    int larger = x.numerator, smaller = x.denominator;
    if ( larger < smaller ) std::swap( larger, smaller );
    while ( int rem = larger % smaller ) {
        larger = smaller;
        smaller = rem;
    }
    x.numerator /= smaller;
    x.denominator /= smaller;
}


ratio &operator += ( ratio &l, ratio const &r ) {
    l.numerator = l.numerator * r.denominator
                + r.numerator * l.denominator;
    l.denominator *= r.denominator;
    reduce( l );
    return l;
}

ratio &operator -= ( ratio &l, ratio const &r )
    { return l += - r; }

ratio &operator *= ( ratio &l, ratio const &r ) {
    l.numerator *= r.numerator;
    l.denominator *= r.denominator;
    reduce( l );
    return l;
}

ratio &operator /= ( ratio &l, ratio const &r ) {
    l.numerator *= r.denominator;
    l.denominator *= r.numerator;
    reduce( l );
    return l;
}

演算子+-*、の正規定義/

于 2010-11-27T06:17:19.593 に答える
0

クラスには、引数がゼロのコンストラクターがありません。したがって、次のコード:

class object=class();

存在しないコンストラクターを使用しようとしています。ゼロの引数を取るコンストラクターを作成するか(明示的に、または別のコンストラクターの引数にすべてのデフォルト値を提供することによって)、構築時に値を提供する必要があります。

class object(1, 2, 3, 4);
class object2 = class(1, 2, 3, 4);
于 2010-11-27T03:57:08.880 に答える
0

今問題は...その追加や他の機能を実行していない...プログラムは完璧に実行されていますが、どういうわけか私は追加や他の機能を動作させることができます

ありがとう

#include <iostream>
using namespace std;

// Class Definitions

class RationalNumber
{
public:
     RationalNumber(int, int, int, int);                    
     RationalNumber operator+(RationalNumber);
     RationalNumber operator-(RationalNumber);
     RationalNumber operator*(RationalNumber);
     RationalNumber operator/(RationalNumber);
     RationalNumber operator<(RationalNumber);
     RationalNumber operator>(RationalNumber);
     RationalNumber operator<=(RationalNumber);
     RationalNumber operator>=(RationalNumber);
     RationalNumber operator==(RationalNumber);
     RationalNumber operator!=(RationalNumber);
private:
     int numerator;
     int denominator;
     int numerator2;
     int denominator2;

};  // end RationalNumber class


// RationalNumber class member-function definitions
RationalNumber::RationalNumber(int num, int denom, int num2, int denom2)
{
     numerator = num;
     denominator = denom;
     numerator2 = num2;
     denominator2 = denom2;

//for first fraction
     if (denominator == 0 || denominator < 0)
          cout << "ERROR:Denominator can not be zero or less than zero." << "\n";

     else
          //Reduces the fraction to lowest terms.
     {
          int i = numerator > denominator ? numerator : denominator;

          while(i > 1)
          {
               if(numerator % i == 0 && denominator % i == 0)  
               {
               numerator /= i;
               denominator /= i;
               }
               --i;
          }

     }

     cout << "Simplified fraction one is: " << numerator << " / "
        << denominator << "\n";

//For second fraction
     if (denominator2 == 0 || denominator2 < 0)
          cout << "ERROR:Denominator can not be zero or less than zero" << "\n";
     else
          //Reduces the fraction to lowest terms.
     {
          int j = numerator2 > denominator2 ? numerator2 : denominator2;

          while(j > 1)
          {
               if(numerator2 % j == 0 && denominator2 % j == 0)  
               {
               numerator2 /= j;
               denominator2 /= j;
               }
               --j;
          }

     }
     cout << "Simplified fraction two is: " << numerator2 << " / "
        << denominator2 << "\n";

}

// addition operator
RationalNumber RationalNumber::operator+(RationalNumber a)
{
      RationalNumber temp=RationalNumber(1,2,3,4);
      temp.numerator = numerator + a.numerator;
      temp.denominator = denominator + a.denominator;
      temp.numerator2 = numerator2 + a.numerator2;
      temp.denominator2 = denominator2 + a.denominator2;
      return temp;
}

// subtraction operator
RationalNumber RationalNumber::operator-(RationalNumber a)
{
      RationalNumber temp=RationalNumber(1,2,3,4);
      temp.numerator = numerator - a.numerator;
      temp.denominator = denominator - a.denominator;
      temp.numerator2 = numerator2 - a.numerator2;
      temp.denominator2 = denominator2 - a.denominator2;
      return temp;
}

// multiplication operator
RationalNumber RationalNumber::operator*(RationalNumber a)
{
      RationalNumber temp=RationalNumber(1,2,3,4);
      temp.numerator = numerator * a.numerator;
      temp.denominator = denominator * a.denominator;
      temp.numerator2 = numerator2 * a.numerator2;
      temp.denominator2 = denominator2 * a.denominator2;
      return temp;
}

// division operator
RationalNumber RationalNumber::operator/(RationalNumber a)
{
      RationalNumber temp=RationalNumber(1,2,3,4);
      temp.numerator = numerator / a.numerator;
      temp.denominator = denominator / a.denominator;
      temp.numerator2 = numerator2 / a.numerator2;
      temp.denominator2 = denominator2 / a.denominator2;
      return temp;
}

int main()
{

     int top;
     int bot;
     int top2;
     int bot2;

     cout << "Please enter the Numerator for fraction one: \n";
     cin >> top;
     cout << "Please enter the Denominator for fraction one: \n";
     cin >> bot;
     cout << "Please enter the Numerator for fraction two: \n";
     cin >> top2;
     cout << "Please enter the Denominator for fraction two: \n";
     cin >> bot2;

     RationalNumber A(top, bot, top2, bot2);
     return 0;

}
于 2010-11-27T04:14:02.800 に答える