我的代码存在问题。它现在没有执行任何功能......既不是加法也不是减法,也不是除法,也不是乘法。
任何帮助都将受到赞赏......我需要解释......这样我才能理解并完成它: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;
}
答案 0 :(得分:4)
通过声明RationalNumber(int, int, int, int)
,您会自动删除默认构造函数,即不再可以通过调用不带参数的构造函数来创建类的实例。
换句话说,
RationalNumber number;
不再可能。你需要说
RationalNumber number(1,2,3,4);
。
如果您希望能够使用默认构造函数创建实例,那么除了另一个构造函数之外,还需要定义一个实例:
RationalNumber()
{
// Initialization
}
答案 1 :(得分:1)
重新定义您的运营商:
RationalNumber RationalNumber::operator+(RationalNumber a)
{
return RationalNumber(
numerator + a.numerator,
denominator + a.denominator,
numerator2 + a.numerator2,
denominator2 + a.denominator2);
}
这可以避免创建导致您悲伤的无参数临时。它还有助于编译器使用返回值优化(RVO)。
答案 2 :(得分:1)
我会快速拍摄它......
#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;
}
运营商+
,-
,*
,/
的规范定义。
答案 3 :(得分:0)
您的类没有带零参数的构造函数。因此,以下代码:
class object=class();
尝试使用不存在的构造函数。您必须编写一个带零参数的构造函数(显式或通过为另一个构造函数的参数提供所有默认值),或者必须在构造时提供值:
class object(1, 2, 3, 4);
class object2 = class(1, 2, 3, 4);
答案 4 :(得分:0)
现在的问题是......它没有执行任何添加或任何其他功能...程序运行完美但不知何故我得到additon和其他功能工作
感谢
#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;
}