C++运算符重载、友元函数重载
来源:互联网 发布:java以什么编码 编辑:程序博客网 时间:2024/06/03 01:36
实验要求:
1、设计一个类,用自己的成员函数重载运算符,使对整型的运算符=、+、-、*、/ 适用于分数运算。要求:
(1)输出结果是最简分数(可以是带分数);
(2)分母为1,只输出分子。
#include<iostream>using namespace std;class score{public: score(int X=0,int Y=0){ x=X; y=Y; } void base(){ int t; t=x%y; while(t!=1){ x=y; y=t; t=x%y; } } void print(){ int z; if((x<y)&&(y!=1)){ cout<<x<<"/"<<y<<endl; } if((x>y)&&(y!=1)){ z=x/y; if(x%y!=0) cout<<z<<"("<<x%y<<"/"<<y<<")"<<endl; else cout<<z<<endl; } } score operator+(score c); score operator-(score c); score operator*(score c); score operator/(score c);private: int x,y;};score score::operator+(score c){ score temp; if(y!=c.y){ temp.y=y*c.y; temp.x=x*c.y+c.x*y; } return temp;}score score::operator-(score c){ score temp; if(y!=c.y) { temp.y=y*c.y; temp.x=x*c.y-c.x*y; } return temp;}score score::operator*(score c){ score temp; if(y!=c.y) { temp.y=y*c.y; temp.x=x*c.x; } return temp;}score score::operator/(score c){ score temp; if(y!=c.y) { temp.y=y*c.x; temp.x=x*c.y; } return temp;}int main(){ score A1(3,2),A2(5,7),A3,A4,A5,A6; A1.print(); A2.print(); A3=A1+A2; A3.print(); A4=A1-A2; A4.print(); A5=A1*A2; A5.print(); A6=A1/A2; A6.print(); return 0;}
分析:对几个运算重载使之能够进行分数的运算,在运算的时候还要注意输出最简分数,所以开始需要解决的问题是如何实现运算符的重载,通过operator实现对几个不同的运算符的重载,然后通过辗转相除法求该分式有无最大公约数,对分数进行化简,需要注意的是当分母为一的时候注意去掉分母,还有就是在输出的时候要注意当分子大于分母的时候要记得化为带分式。
2、用友元函数重载运算符,使对整型的运算符=、+、-、*、/ 适用于分数运算。
#include<iostream>using namespace std;class score{public: score(int X=0,int Y=0){ x=X; y=Y; } void base(){ int t; t=x%y; while(t!=1){ x=y; y=t; t=x%y; } } void print(){ int z; if((x<y)&&(y!=1)){ cout<<x<<"/"<<y<<endl; } if((x>y)&&(y!=1)){ z=x/y; if(x%y!=0) cout<<z<<"("<<x%y<<"/"<<y<<")"<<endl; else cout<<z<<endl; } } friend score operator+(score &a,score &b); friend score operator-(score &a,score &b); friend score operator*(score &a,score &b); friend score operator/(score &a,score &b);private: int x,y;};score operator+(score &a,score &b){ score temp1; if(a.y!=b.y){ temp1.y=a.y*b.y; temp1.x=a.x*b.y+b.x*a.y; } return temp1;}score operator-(score &a,score &b){ score temp1; if(a.y!=b.y) { temp1.y=a.y*b.y; temp1.x=a.x*b.y-b.x*a.y; } return temp1;}score operator*(score &a,score &b){ score temp1; if(a.y!=b.y) { temp1.y=a.y*b.y; temp1.x=a.x*b.x;} return temp1;}score operator/(score &a,score &b){ score temp1; if(a.y!=b.y) { temp1.y=a.y*b.x; temp1.x=a.x*b.y; } return temp1;}int main(){ score A1(1,2),A2(6,5),A3,A4,A5,A6; A1.print(); A2.print(); A3=A1+A2; A3.print(); A4=A1-A2; A4.print(); A5=A1*A2; A5.print(); A6=A1/A2; A6.print(); return 0;}
分析:我们在上一个实验的基础上通过友元函数实现上述要求,通过友元关系可以实现不同类或对象的成员函数之间,类的成员函数与一般函数之间进行数据共享机制。我们先在类中声明这几个重载函数为该类的友元,这里要注意此时重载函数的参数有两个而不是一个,友元函数需要两个参数分别调用在主函数往里面传递的值,友元函数最大的好处就是能够调用类中的私有数据成员,还能保证类的封装性。
1 0
- 十七、运算符重载(一) 成员函数重载、友元函数重载、运算符重载规则
- 【c++】关于类继承运算符重载友元函数
- 关于运算符重载 成员函数运算符重载 友元函数运算符重载
- 运算符重载与友元函数
- c++ 运算符重载 友元函数
- 利用友元函数,重载运算符
- 友元函数重载运算符
- 运算符重载为友元函数
- 重载运算符以及友元函数
- 7.10友元函数重载运算符
- 运算符重载和友元函数
- 友元函数编写运算符重载
- 友元函数编写运算符重载
- C++ 重载运算符 友元函数
- C++运算符重载,友元函数
- 友元函数以及重载运算符
- 友元函数和运算符重载
- 重载运算符与友元函数
- ZCMU—G
- Android Studio使用指南
- 理解 TCP 和 UDP(四)TCP 状态流转
- 《机器学习》(周志华) 习题3.1-3.3个人笔记
- 类的继承与多态
- C++运算符重载、友元函数重载
- Spring框架IOC容器和AOP解析
- 解决pip install下载速度慢的问题
- 3伸缩布局-携程旅行
- 浅谈DNS域名解析
- hdu2586 lca
- 理解 TCP 和 UDP(五)TCP 可靠性交付的实现
- Android-UI:用户登录界面
- Linux 安装Nginx详细教程