c++的运算符重载题目

定义分数类:
//fraction.h
#include <iostream.h>
class fraction{
private:
int above;
int below;
public:
//…
};
//使用以下代码编程:
#include "fraction.h"
#include <iostream.h>
int main()
{
fraction f1(-2,-3),f2,f3,f4,f5(6);
cin>>f2; //input: -2 3
cout << "f1=" << f1 << endl;
cout << "f2=" << f2 << endl;
f3=f1+f2;
f4=f1+1;
f5=3+f2;
cout << "f3=" << f3 << endl;
cout << "f4=" << f4 << endl;
cout << "f5=" << f5 << endl;
return 0;
}
//运行程序,输入: -2 3 将得到以下结果::
f1=2/3
f2=-2/3
f3=0
f4=5/3
f5=7/3
请您把答案写的详细点,尽量通俗易懂,最好是有注释啦~~~~~

//fraction.h
#include <iostream.h>
class fraction{
private:
int above;
int below;
public:
friend fraction operator+(fraction &a , fraction &b){
int x,y;
x=(a.above)*(b.below)+(a.below)*(b.above);
y=(a.below)*(b.below);

return fraction(x,y);
}
fraction &operator=(fraction &a){
this->above=a.above;
this->below=a.below;

return *this;
}
friend fraction operator+(fraction &a , int b){
int x,y;
x=a.above+b*a.below;
y=a.below;

return fraction(x,y);
}

friend fraction operator+(int a , fraction &b){
int x,y;
x=a*b.below+b.above;
y=b.below;

return fraction(x,y);
}

friend ostream &operator<<(ostream &out ,const fraction a){
out<<a.above<<"/"<<a.below;

return out;
}
friend istream &operator>>(istream &in , fraction &a){
in>>a.above>>a.below;

return in;
}
fraction(int a=0,int b=1){
above=a;
below=b;
}
};

//test.cpp
#include "fraction.h"
#include <iostream.h>
int main()
{
fraction f1(-2,-3),f2,f3,f4,f5(6);
cin>>f2; //input: -2 3
cout << "f1=" << f1 << endl;
cout << "f2=" << f2 << endl;
f3=f1+f2;
f4=f1+1;
f5=3+f2;
cout << "f3=" << f3 << endl;
cout << "f4=" << f4 << endl;
cout << "f5=" << f5 << endl;
return 0;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-06-01
看不明结果,代码仅供参考。
class fraction
{
private:
int above;
int below;
public:
fraction(int a = 0, int b = 1) { above = a; below = b; } // 构造函数
friend istream &operator>>(istream &in, fraction &f) // 重载输入操作符
{
in >> f.above >> f.below;
return in;
}
friend ostream &operator<<(ostream &out, const fraction &f) // 重载输出操作符
{
if (f.below != 0)
{
if (f.above < 0 && f.below < 0)
out << -f.above << "/" << -f.below;
else
out << f.above << "/" << f.below;
}
else
out << 0;
return out;
}
friend fraction operator+(int num, const fraction &f) // 3 + f2
{
return fraction(f.above+num, f.below);
}
fraction operator+(const fraction &f) // f1 + f2 或者 f1 + 1;
{
return fraction(above + f.above, below + f.below);
}

};
第2个回答  2009-06-01
题目挺有意思。不过这个题目不太完美,分数的运算只要求了加法。略略看了两位师兄的答案,似乎不尽如人意,一楼的师兄没有进行约分,出来的结果可能是假分数,其余的代码我没看。二楼的师兄那个加法的重载也有问题,剩下的代码也没看。最近课业比较紧张,楼主要是不急的话,我可以做一个。有问题的话可以讨论,452032545

c++关于运算符重载的问题
2 char &charArray::operator[](int i)\/\/&是什么用,去掉会出错 返回的是一个char 型的变量,去掉的话返回的是char型的值。前者可以作为变量对它进行赋值。后者只是一个char型的值而已

C++关于运算符重载的一道题
选C.看题目:-- 若在表达式“y\/x”(y在前面),"\/"是作为成员函数重载(成员函数)的运算符 调用y的成员函数operator\/, 也就是 y.operator\/(x)

c++ 重载函数问题 复数是如何实现的?请解释的详细一点 在线等_百度...
double im = 0){\/\/初始化复数Real = re;Imag = im;}virtual ~CComplex();\/\/析构函数bool IsReal();\/\/判断是否为实数double GetReal(){return Real;}double GetImag(){return Imag;

C++ 单目运算符的重载问题
返回值就是这个对象。this指针就是指调用这个函数的对象。返回*this就是对this做解引操作,故返回的是对象本身。这个问题很容易理解,假如一个正型变量int a = 5;对a进行自增运算,即a++,意思是把a的值+1后赋予a。这个重载中,返回这个对象本身就是返回自增后的这个变量。如果不返回(类型为void...

关于c++中运算符重载的题 谢谢 有一个double的数和一个复数相加 分两种...
friend Complex operator +(Complex &c1,Complex &c2);\/\/运算符重载 private:double real;double imag;};Complex operator +(Complex &c1,Complex &c2){ return Complex(c1+c2);} void Complex::write (){ cout<<"请输入实部和虚部"<<endl;cin>>real>>imag;} void Complex::display ()...

C++类的重载单目运算符的问题
1:前置即++a,是可以做左值的,因此返回时是*this,比如说++(++a)时如果不是返回的是*this第二次++就不可能应用在a身上。2:因为如果直接用就不是后置的含义了,后置是先将变量的值做为表达式的值确定下来,再将变量加一,这是原本后置运算含义,如果如同你写的:Clock Clock:: operator ++(int...

C++重载运算符问题
{ \/\/return num(n + r.get());num newnum(n + r.get());return newnum;} 这种情况下不但要先调用参数构造函数,返回的时候还要调用复制构造函数,而返回后还要把产生的对象给析构掉。而刚才那种返回一个匿名的临时对象的方法,要简单多了。如果有机会看林锐的《高质量C\/C++编程指南》的话,...

关于运算符重载,下列表述中正确的是( )。
【答案】:C 重载运算符的规则如下:①c++不允许用户自已定义新的运算符,只能对已有的c++运算符进行重载;②c++不能重载的运算符只有5个;③重载不能改变运算符运算对象的个数;④重载不能改变运算符的优先级和结合性;⑤重载运算符的函数不能有默认的参数;⑥重载的运算符必须和用户定义的自定义类型...

C++重载问题
把 “int main()”改成int main()”即可。原来的括号是中文输入状态下的,系统会报错。

一个关于C++重载的问题
assistant operator [](int i)\/\/重载下标运算符 { assistant assis;assis.aPtr=ptr;assis.n=size2;assis.i=i;return assis;} Array2 & operator = (Array2 & s){ if(ptr) delete [] ptr;ptr = new int[size1 * size2];for(int i = 0; i < size1; i ++){ for(int j = 0...

相似回答