C++的一道编程问题,请各位大侠指教

已知一个有理数类Zrf_Ratio,实现如下的操作符重载形式:
friend std::ostream& operator<<(std::ostream&, const zrf_Ratio&);
friend std::istream& operator>>(std::istream&, zrf_Ratio&);
friend bool operator==(const zrf_Ratio&, const zrf_Ratio&);
friend bool operator<(const zrf_Ratio&, const zrf_Ratio&);
测试用主函数:
int main()
{
zrf_Ratio zrf(1,7),ssh(26,65);
std::cout<<"zrf is:"<<zrf<<"; ssh is:"<<ssh<<'\n' ;
std::cout<<"(zrf==ssh) is:"<<(zrf==ssh)<<"; (zrf<ssh) is:"<<(zrf<ssh) ;
return 0;

}
运行结果:
zrf is:1/7; ssh is:2/5
(zrf==ssh) is:0; (zrf<ssh) is:1
我是初学者,各位大侠帮个忙

//这道题目作出来了,和楼主给的运行结果完全相符
//呵呵,楼主这次题目我全给出可编译的代码,要给分哦!
//只要将代码拷贝就可以了,我已经编译运行成功!
#include <iostream>
class zrf_Ratio;
std::ostream& operator<<(std::ostream&, const zrf_Ratio&);
std::istream& operator>>(std::istream&, zrf_Ratio&);
bool operator==(const zrf_Ratio&, const zrf_Ratio&);
bool operator<(const zrf_Ratio&, const zrf_Ratio&);

class zrf_Ratio
{
private:
//一些友元运算符的重载

friend std::ostream& operator<<(std::ostream&, const zrf_Ratio&);
friend std::istream& operator>>(std::istream&, zrf_Ratio&);
friend bool operator==(const zrf_Ratio&, const zrf_Ratio&);
friend bool operator<(const zrf_Ratio&, const zrf_Ratio&);

int top;
int bottom;
int show_b(int n,int m) //求最大公约数
{
int temp,r;
if(n<m)
{
temp=n;
n=m;
m=temp;
}
while(m)
{
r=n%m;
n=m;
m=r;
}
return n;
}
public:
zrf_Ratio(){};//缺省构造函数
zrf_Ratio(int itop,int ibottom):top(itop),bottom(ibottom)//构造函数
{
go_easy();
}
//化简函数
void go_easy()
{
int op1(top),op2(bottom);
if(op1<0)
op1=-op1;
if(op2<0)
op2=-op2;
int temp=show_b(op1,op2);
top/=temp;
bottom/=temp;
}
//一些运算符重载
zrf_Ratio& operator=(const zrf_Ratio &op)
{
top=op.top;
bottom=op.bottom;
return *this;
}

};
std::ostream &operator<<(std::ostream &stream,const zrf_Ratio& op)
{
stream<<op.top<<"/"<<op.bottom;
return stream;
}

std::istream& operator>>(std::istream &stream, zrf_Ratio& op)
{
stream>>op.top>>op.bottom;
return stream;
}

bool operator==(const zrf_Ratio&op1, const zrf_Ratio&op2)
{
return ((op1.top==op2.top)&&(op1.bottom==op2.bottom));
}
bool operator<(const zrf_Ratio&op1, const zrf_Ratio&op2)
{
return ((op1.top*op2.bottom)<(op2.top*op1.bottom));
}

int main()
{
zrf_Ratio zrf(1,7),ssh(26,65);
std::cout<<"zrf is:"<<zrf<<"; ssh is:"<<ssh<<'\n' ;
std::cout<<"(zrf==ssh) is:"<<(zrf==ssh)<<"; (zrf<ssh) is:"<<(zrf<ssh) ;

return 0;

}
温馨提示:内容为网友见解,仅供参考
第1个回答  2006-05-30
这么简单,你白菜
第2个回答  2019-09-21
//又搞定了一道题目,呵呵
//这个我编译运行了,与你给的运行结果一模一样
//你可以直接拷贝过去使用了。
#include
<iostream>
class
zrf_Ratio;
std::ostream
&operator<<(std::ostream
&stream,zrf_Ratio
op);
zrf_Ratio
operator-(const
zrf_Ratio&);
zrf_Ratio
operator+(const
zrf_Ratio&,
const
zrf_Ratio&);
zrf_Ratio
operator-(const
zrf_Ratio&,
const
zrf_Ratio&);
zrf_Ratio
operator*(const
zrf_Ratio&,
const
zrf_Ratio&);
zrf_Ratio
operator/(const
zrf_Ratio&,
const
zrf_Ratio&);
class
zrf_Ratio
{
private:
//一些友元运算符的重载
friend
zrf_Ratio
operator-(const
zrf_Ratio&);
friend
zrf_Ratio
operator+(const
zrf_Ratio&,
const
zrf_Ratio&);
friend
zrf_Ratio
operator-(const
zrf_Ratio&,
const
zrf_Ratio&);
friend
zrf_Ratio
operator*(const
zrf_Ratio&,
const
zrf_Ratio&);
friend
zrf_Ratio
operator/(const
zrf_Ratio&,
const
zrf_Ratio&);
friend
std::ostream
&operator<<(std::ostream
&stream,zrf_Ratio
op);
int
top;
int
bottom;
int
show_b(int
n,int
m)
//求最大公约数
{
int
temp,r;
if(n<m)
{
temp=n;
n=m;
m=temp;
}
while(m)
{
r=n%m;
n=m;
m=r;
}
return
n;
}
public:
zrf_Ratio(){};//缺省构造函数
zrf_Ratio(int
itop,int
ibottom):top(itop),bottom(ibottom)//构造函数
{
go_easy();
}
//化简函数
void
go_easy()
{
int
op1(top),op2(bottom);
if(op1<0)
op1=-op1;
if(op2<0)
op2=-op2;
int
temp=show_b(op1,op2);
top/=temp;
bottom/=temp;
}
zrf_Ratio&
operator=(const
zrf_Ratio
&op)
{
top=op.top;
bottom=op.bottom;
return
*this;
}
};
zrf_Ratio
operator-(const
zrf_Ratio&op)
{
return
zrf_Ratio(-op.top,op.bottom);
}
zrf_Ratio
operator+(const
zrf_Ratio&op1,
const
zrf_Ratio&op2)
{
return
zrf_Ratio(op1.top*op2.bottom+op2.top*op1.bottom,op1.bottom*op2.bottom);
}
zrf_Ratio
operator-(const
zrf_Ratio&op1,
const
zrf_Ratio&op2)
{
return
zrf_Ratio(op1.top*op2.bottom-op2.top*op1.bottom,op1.bottom*op2.bottom);
}
zrf_Ratio
operator*(const
zrf_Ratio&op1,
const
zrf_Ratio&op2)
{
return
zrf_Ratio(op1.top*op2.top,op1.bottom*op2.bottom);
}
zrf_Ratio
operator/(const
zrf_Ratio&op1,
const
zrf_Ratio&op2)
{
return
zrf_Ratio(op1.top*op2.bottom,op1.bottom*op2.top);
}
std::ostream
&operator<<(std::ostream
&stream,zrf_Ratio
op)
{
stream<<op.top<<"/"<<op.bottom;
return
stream;
}
int
main()
{
zrf_Ratio
zrf(1,7),ssh(26,65);
std::cout<<"zrf
is:"<<zrf<<";
ssh
is:"<<ssh<<'\n'
;
std::cout<<"-zrf
is:"<<-zrf;
std::cout<<"\n(zrf-ssh)
is:"<<(zrf-ssh);
std::cout<<"\n(zrf+ssh)
is:"<<(zrf+ssh)
;
std::cout<<"\n(zrf*ssh)
is:"<<(zrf*ssh)
;
std::cout<<"\n(zrf/ssh)
is:"<<(zrf/ssh)
;
return
0;
}

...我编了以下程序,可老出错,想请各位大侠帮帮忙!先谢谢了!
(1)题目的意思是:"当输入:"后面的那句"How about you?"和"输入:"后的那句"OK"是由你从键盘中输入的,其它的都由程序自动输出 (2)你存在很多语法错误 比如C++中是分大小写的,可你的代码中大小写不分;类成员函数的定义格式也不对 建议你先看一下C++基础教材,先掌握语法,模仿教材上的设计 incl...

C++程序,求解
\/*编写一个C++程序,请求用户输入10首歌名,歌名存入一字符指针数组,然后分别按原序,子母序,字母逆序显示这些歌名。我是初学者,请各位大侠帮助。*\/ include<iostream> include<string.h> define N 4\/*用户输入歌名的个数,现在为四首,可以自己改,你应该知道吧。呵呵*\/ using namespace std;...

请问各位大侠下面c++代码: cout<<*(a+i)[j]<<endl; cout<<*(a+3*0...
因为[]的优先级比*高,所以,*(a+i)[j]就是*((a+i)[j]) ,即,第三行第一列的那个元素。第二条是*(a+1),a+1,移到第二行,即4,5,6那行,然后*(a+1)就是第二行的首地址了,这个值嘛会是多少就不大清楚了,,,

麻烦各位大侠看下这个问题,有关c++的,我太菜了
include <math.h> include <iostream> using namespace std;class point { protected:double x1,y1;public:point(double a,double b){ x1=a;y1=b;} ~point(){} virtual void display();};class line:public point { protected:double x2,y2;public:line(double x,double y ,double m,doub...

C++编程题找错,很急,谢谢
主要问题出在下面的这个函数:\/\/做了两个修改1.把函数的返回值改为了引用,当然函数声明也得该 \/\/2.把tmp改成了局部静态变量 \/\/或者改为全局变量 Polynomial & Polynomial::operator+ (const Polynomial& rhs) \/\/引用 { \/\/涓轰粈涔堣繖涔堜笉琛?static Polynomial tmp;\/\/Polynomial tmp = *...

各位c++大侠,我是一个自学c++的菜鸟,很菜的问题,跪求指点啊
因为程序运行完了就会把控制台关闭,而你在程序中执行后,他会提示你”请按任意键继续……’,因为这句话的缘故让你能一直看到控制台,如果你想在debug里看久一点,那么可以在程序的末尾加上一个sleep,或者加入一个输入语句。

求教一个C++运行的时候出现的问题
NK2005: _main already defined in 1.obj 意思是main函数已经在1.cpp中被定义 你在2.cpp又定义一次,导致编译器无法连接,2.cpp需重新建立一个工程在进行编译

急!!!一个C++程序问题~~很急!!
急!!!一个C++程序问题~~很急!! 王婆卖瓜,每卖一个要记录瓜的重量,还要记录卖出的总重量和总个数(weight,total_weight,total_number),同时允许退瓜,卖瓜用构造函数模拟;退瓜用析构函数模拟,瓜重用disp()函数... 王婆卖瓜,每卖一个要记录瓜的重量,还要记录卖出的总重量和总个数(weight,total_weight,total...

急,拜求VC++指导老师,请各位大侠帮忙一下。
请参阅:CAsyncsocket, CSocketFile CSocket类成员 构造 CSocket 构造一个CSocket对象 Create 创建一个插槽 属性 IsBlocking 确定一个阻塞调用是否在进行中 FromHandle 返回一个指向CSocket对象的指针,给出一个插槽句柄 Attach 将一个插槽句柄与一个CSocket对象连接 操作符 CancelBlockingCall 取消一个当前在...

在c++中,我要输出一个数小数点后有6位怎么办?请各位大侠支招啊
printf("%.6lf\\n",x)输出含有六位小数的double型x。如果是float去掉引号中的l.

相似回答