实验11 运算符重载.doc
《实验11 运算符重载.doc》由会员分享,可在线阅读,更多相关《实验11 运算符重载.doc(13页珍藏版)》请在咨信网上搜索。
实验11 运算符重载(1) 一、实验目的 1、掌握运算符重载的概念; 2、掌握使用friend重载运算符的方法。 二、实验内容 1、用成员函数重载运算符,使对整型的运算符=、+、-、*、/ 适用于分数运算。要求: (1)输出结果是最简分数(可以是带分数); (2)分母为1,只输出分子。 2、用友元函数重载运算符,使对整型的运算符=、+、-、*、/ 适用于分数运算。 3、定义如下集合类的成员函数,并用数据进行测试: class Set { int *elem; //存放集合元素的指针 int count; //存放集合中的元素个数 public: Set(); Set(int s[],int n); int find(int x) const; //判断x是否在集合中 Set operator+(const Set &); //集合的并集 Set operator-(const Set &); //集合的差集 Set operator*(const Set &); //集合的交集 void disp(); //输出集合元素 }; 4、定义一个人民币类 RMB,包含私有数据成员元、角、分,请用友元函数重载运算符“+”和“++”,以对类对象进行运算。 三、 实验程序及结果 1. #include<iostream> using namespace std; class Complex{ public: Complex(int X=0,int Y=0) //构造函数初始化 {x=X;y=Y;} void gys() //求最大公约数 { 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; cout<<z<<"("<<x%y<<"/"<<y<<")"<<endl; } } Complex operator+(Complex c); //声明运算符重载函数 Complex operator-(Complex c); Complex operator*(Complex c); Complex operator/(Complex c); private: int x,y; }; Complex Complex::operator+(Complex c) //定义+重载函数 { Complex temp1; if(y!=c.y) { temp1.y=y*c.y; temp1.x=x*c.y+c.x*y; } return temp1; } Complex Complex::operator-(Complex c) //定义-重载函数 { Complex temp1; if(y!=c.y) { temp1.y=y*c.y; temp1.x=x*c.y-c.x*y; } return temp1; } Complex Complex::operator*(Complex c) //定义*重载函数 { Complex temp1; if(y!=c.y) { temp1.y=y*c.y; temp1.x=x*c.x; } return temp1; } Complex Complex::operator/(Complex c) //定义/重载函数 { Complex temp1; if(y!=c.y) { temp1.y=y*c.x; temp1.x=x*c.y; } return temp1; } int main() { Complex 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; } 2.(注释同上) #include<iostream.h> //using namespace std; class Complex{ public: Complex(int X=0,int Y=0) {x=X;y=Y;} void gys() { 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; cout<<z<<"("<<x%y<<"/"<<y<<")"<<endl; } } friend Complex operator+(Complex& a,Complex& b); friend Complex operator-(Complex& a,Complex& b); friend Complex operator*(Complex& a,Complex& b); friend Complex operator/(Complex& a,Complex& b); private: int x,y; }; Complex operator+(Complex& a,Complex& b) { Complex temp1; if(a.y!=b.y) { temp1.y=a.y*b.y; temp1.x=a.x*b.y+b.x*a.y; } return temp1; } Complex operator-(Complex& a,Complex& b) { Complex temp1; if(a.y!=b.y) { temp1.y=a.y*b.y; temp1.x=a.x*b.y-b.x*a.y; } return temp1; } Complex operator*(Complex& a,Complex& b) { Complex temp1; if(a.y!=b.y) { temp1.y=a.y*b.y; temp1.x=a.x*b.x; } return temp1; } Complex operator/(Complex& a,Complex& b) { Complex temp1; if(a.y!=b.y) { temp1.y=a.y*b.x; temp1.x=a.x*b.y; } return temp1; } int main() { Complex A1(3,2),A2(5,7),A3,A4,A5,A6,G; 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; } 3. #include<iostream> using namespace std; class Set { int *elem; //存放集合元素的指针 int count; //存放集合中的元素个数 public: Set(){}; Set(int s[],int n); int find(int x) const; //判断x是否在集合中 Set operator+(const Set &a); //集合的并集 Set operator-(const Set &a); //集合的差集 Set operator*(const Set &a); //集合的交集 void disp(); //输出集合元素 }; Set::Set(int s[],int n) //构造函数初始化 { elem=s; count=n; } int Set::find(int x) const //判断x是否在集合中 { int n; for(n=0;n<count;n++) { if(x=elem[n]) cout<<"x在集合中"<<endl; return 1; } return 0; } Set Set::operator +(const Set& a) //重载运算符+求两数组的并集 { Set temp; int k=0,m,n,p; int *b=new int [k]; for(n=0;n<a.count;n++) { b[k]=a.elem[n]; k++; } for(m=0;m<count;m++) //定义一个新数组,使其等于elem[],找出另一个数组中不相等的数,放进另一个数组,两个新数组连接着输出,即为他们的并集 { for(n=0;n<a.count;n++) { if(elem[m]==a.elem[n]) { p=1; continue; } } } for(m=0;m<count;m++) { if(p!=1) { b[k]=elem[m]; k++; } } cout<<endl; temp.count=k; temp.elem=b; return temp; } Set Set::operator -(const Set& a) //定义重载运算符-用于计算差集 { Set temp; int p=0,m,n,q; int *b=new int [p]; for(m=0;m<count;m++) { for(n=0;n<a.count;n++) //找出两数组不相等的数,把只是属于elem的数放进新数组中,输出即为A-B { if(elem[m]==a.elem[n]) { q=1; continue; } } } for(m=0;m<count;m++) { if(q!=1) { b[p]=elem[m]; p++; } } cout<<endl; temp.count=p; temp.elem=b; return temp; } Set Set::operator *(const Set& a) //定义重载运算符*计算两数组交集 { Set temp; int k=0,m,n; int *b=new int [k]; for(m=0;m<count;m++) //如果两数组的值相等,把相等的值放进新数组,输出即为交集 { for(n=0;n<a.count;n++) { if(elem[m]==a.elem[n]) { b[k]=elem[m]; k++; } } } cout<<endl; temp.count=k; temp.elem=b; return temp; } void Set::disp() { for(int i=0;i<count;i++) { cout<<elem[i]<<" "; } cout<<endl; } int main() { int aa[4]={1,2,3,4}; int bb[5]={3,4,5,6,7}; Set A,B,C,D,E; A=Set(aa,4); B=Set(bb,5); A.find(2); A.disp(); B.disp(); E=A*B; cout<<"两个数组的交集为:"<<endl; E.disp(); C=A+B; cout<<"两个数组的并集为:"<<endl; C.disp(); D=A-B; cout<<"两个数组的差集为:"<<endl; D.disp(); return 0; } 4. #include<iostream.h> //using namespace std; class Complex{ public: Complex(int X=0,int Y=0,int Z=0) {x=X;y=Y;z=Z;} void print() { if(z>=10) { z=z-10; y=y+1; if(y>=10) { y=y-10; x=x+1; } } cout<<x<<"元"<<y<<"角"<<z<<"分"<<endl; } Complex operator+(Complex c); //声明运算符重载函数 Complex operator++(); //声明自减运算符--重载成员函数(前缀) Complex operator++(int); //声明自减运算符--重载成员函数(后缀) private: int x,y,z; }; Complex Complex::operator+(Complex c) //定义+重载函数 { Complex temp1; temp1.x=x+c.x; temp1.y=y+c.y; temp1.z=z+c.z; return temp1; } Complex Complex::operator++() //定义++重载函数(前缀) {++x;++y;++z; return *this; } Complex Complex::operator++(int) //定义++重载函数(后缀) {Complex temp(*this); x++;y++;z++; return temp; } int main() { Complex A(7,8,9),B(4,5,6),C; //定义四个类的对象 A.print(); //输出对象A的值 B.print(); //输出对象B的值 C=A+B; //两对象A、B相加 C.print(); //输出相加后的值 ++A; //执行++前缀 A.print(); //输出执行后的值 B++; //执行++后缀 B.print(); //输出执行后的值 return 0; }- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验11 运算符重载 实验 11 运算 重载
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【xrp****65】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【xrp****65】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【xrp****65】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【xrp****65】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文