河北工业大学-C++实验报告实验四_第1页
河北工业大学-C++实验报告实验四_第2页
河北工业大学-C++实验报告实验四_第3页
河北工业大学-C++实验报告实验四_第4页
河北工业大学-C++实验报告实验四_第5页
已阅读5页,还剩10页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、编写一个程序,要求:(1ComplexComplex的两个对象c1和c2,对象c1通过构造函数直接指定复数的实部和虚部(类私有数据成员为double类型:real和)为2.5及3.7,对象c2通过构造函数直接指定复数的实部和虚部为4.2及6.5;(2)定义友元运算符重载函数,它以c1c2对象为参数,调用该函数时能返回两个复数对象相加操作;(3)定义成员函数print,调用该函数时,以格式“real+imagi”输出当前对象的实部和虚部,例如:对象的实部和虚部分别是4.2和6.5,则调用print函数输出格式为:4.2+6.5;()编写主程序,计算出复数对象c1和c2相加结果,并将其结果输出。#include<iostream>usingnamespacestd;classComplex{public:Complex(doubler=0.0,doublei=0.0);friendComplexoperator+(Complex&a,Complex&b);voidprintf();private:doublereal;doubleimag;};Complex::Complex(doubler,doublei){real=r;imag=i;}Complexoperator+(Complex&a,Complex&b){Complextemp;temp.real=a.real+b.real;temp.imag=a.imag+b.imag;returntemp;}voidComplex::printf(){cout<<real;if(imag>0)cout<<"+";if(imag!=0)cout<<imag<<'i'<<endl;}voidmain(){Complexc1(2.5,3.7),c2(4.2,6.5),c3;c3=c1+c2;c3.printf();}2、编写一个程序,其中设计一个时间类Time,用来保存时、分、秒等私有数据成员,通过重载操作符“+”实现两个时间的相加。要求将小时X围限制在大于等于0,分钟X围限制在0~59分,秒钟X围限制在0~59秒。提示:时间类Time的参考框架如下:classTime{public:Time(inth=0,intm=0,ints=0);//构造函数Timeoperator+(Time&);//运算符重载函数,实现两个时间的相加voiddisptime();//显示时间函数private:inthours,minutes,seconds;};#include<iostream>usingnamespacestd;classTime{public:Time(inth=0,intm=0,ints=0);//构造函数Timeoperator+(Time&);//运算符重载函数,实现两个时间的相加voiddisptime();//显示时间函数private:inthours;intminutes;intseconds;};Time::Time(inth,intm,ints){hours=h;minutes=m;seconds=s;}TimeTime::operator+(Time&t){inth,m,s;s=(t.seconds+seconds)%60;m=(minutes+t.minutes+(t.seconds+seconds)/60)%60;h=hours+t.hours+(minutes+t.minutes+(t.seconds+seconds)/60)/60;hours=h;minutes=m;seconds=s;return*this;}voidTime::disptime(){cout<<hours<<":"<<minutes<<":"<<seconds<<"."<<endl;}voidInput(int&h,int&m,int&s){cout<<"输入时间:";cin>>h;cin>>m;cin>>s;while(m<0||m>59||s<0||s>59){cout<<"******时间输入错误!请重新输!******\n";cout<<"输入时间:";cin>>h;cin>>m;cin>>s;}}intmain(){inth1,m1,s1,h2,m2,s2;Input(h1,m1,s1);Input(h2,m2,s2);TimeA(h1,m1,s1),B(h2,m2,s2);A=A+B;A.disptime();return0;}3、用友元运算符函数或成员运算符函数,重载运算符“+-*现对实验二中实现的矩阵类的对象的加、减、乘法。#include<iostream>#definehang2#definelie2classMatrix{private:intRow;intColumn;intMATRIX[hang][lie];public:Matrix(intr,intc){Row=r;Column=c;}Matrix(){}voidTypeMatrix();voidPrint()const;Matrix&operator=(constMatrix&rhs);Matrixoperator+(constMatrix&rhs);Matrixoperator-(constMatrix&rhs);};voidMatrix::TypeMatrix(){std::cout<<"请输入矩阵:"<<std::endl;for(inti=0;i<hang;i++){for(intj=0;j<lie;j++){std::cin>>MATRIX[i][j];}}}voidMatrix::Print()const{std::cout<<"矩阵的结果为:"<<std::endl;for(intq=0;q<hang;q++){for(ints=0;s<lie;s++){std::cout<<MATRIX[q][s]<<"\t";if(s==lie-1){std::cout<<std::endl;}}}}Matrix&Matrix::operator=(constMatrix&rhs){if(this!=&rhs){for(intg=0;g<hang;g++){for(inth=0;h<lie;h++){this->MATRIX[g][h]=rhs.MATRIX[g][h];}}}return*this;}MatrixMatrix::operator+(constMatrix&rhs){inti,j;for(i=0;i<hang;i++){for(j=0;j<lie;j++){MATRIX[i][j]=this->MATRIX[i][j]+rhs.MATRIX[i][j];}}return*this;}MatrixMatrix::operator-(constMatrix&rhs){inti,j;for(i=0;i<hang;i++){for(j=0;j<lie;j++){MATRIX[i][j]=this->MATRIX[i][j]-rhs.MATRIX[i][j];}}return*this;}intmain(){Matrixa,b,c,d;a.TypeMatrix();b.TypeMatrix();c=a+b;c.Print();d=a-b;d.Print();}4{9,5,4,3,6,7}和{2,4,6,9},计算出他们进行集合的并、差和交运算后的结果。【提示】(1)可以用一下表达式实现整数集合的基本运算:s1+s2两个整数集合的并运算s1-s2两个整数集合的差运算s1*s2两个整数集合的交运算(2)参考以下Set类的框架,用于完成集合基本运算所需的各项功能。classSet{public:Set();voidinput(intd);//向集合中添加一个元素intlength();//返回集合中的元素个数intgetd(inti);//返回集合中位置i的元素voiddisplay();//显示集合的所有元素Setoperator+(Sets1);//员运算符重载函数,实现集合的并运算Setoperator-(Sets1);//员运算符重载函数,实现集合的差运算Setoperator*(Sets1);//员运算符重载函数,实现集合的交运算Setoperator=(Sets1);//员运算符重载函数,实现集合的赋值运算protected:intlen;//统计结合中元素的个数;ints[MAX];//存放集合中的元素};#include<iostream>usingnamespacestd;constintMAX=50;classset{public:set();voidinput(intd);intlength();intgetd(inti);voiddisp();setoperator+(sets1);setoperator-(sets1);setoperator*(sets1);setoperator=(sets1);protected:intlen;ints[MAX];};set::set(){len=0;//s={0};cout<<"***建立一个集合***\n";}voidset::input(intd){len=d;cout<<"输入集合元素"<<d<<"个:";for(inti=0;i<d;i++)cin>>s[i];}intset::length(){intn=0;while(s[n]!='\0'){n++;}returnn;}intset::getd(inti){return0;}voidset::disp(){for(inti=0;i<len;i++)cout<<s[i]<<"";//cout<<endl;}setset::operator+(sets1)//------------------------并运算----------------{//strcat(s,s1.s);for(inti=0;i<len;i++){for(intj=0;j<s1.len;j++)//在s1.s[]中选出不相同的{if(s[i]==s1.s[j])//选出相同的元素删掉得到s1.s与s不同的元素{for(;j<s1.len;j++)s1.s[j]=s1.s[j+1];--s1.len;}}}for(intj=0;j<s1.len;j++)//将s1.s[]中不相同的加在s[]后面{s[len]=s1.s[j];len++;}s[len+s1.len]='\0';return*this;}setset::operator-(sets1)//------------------------差运算------------------{intt;for(inti=0;i<s1.len;i++){for(intj=0;j<len;j++){if(s1.s[i]==s[j])//选出s与s1.s中相同的元素并且删除掉{t=j;for(;t<len;t++)s[t]=s[t+1];--len;}}}return*this;}setset::operator*(sets1)//-------------------交运算----------------------{intm[MAX];intl=0;for(inti=0;i<s1.len;i++){for(intj=0;j<len;j++)//选出相同的元素{if(s1.s[i]==s[j]){m[l]=s[j];l++;}}}for(i=0;i<l;i++)s[i]=m[i];s[l]='\0';len=l;return*this;}setset::operator=(sets1){for(inti=0;i<s1.length();i++)s[i]=s1.s[i];len=s1.len;return*this;}intmain(){intn;setC;setA;cout<<"建立含有几个元素的集合:";cin>>n;A.input(n);setB;cout<<"建立含有几个元素的集合:";cin>>n;B.input(n);cout<<endl;cout<<"两集合的差集(A-B)为:";C=A-B;C.disp();cout<<endl;/*cout<<"两集合的交集(A*B)为:";C=A*B;C.disp();cout<<endl;*//*cout<<"两集合的并集(A+B)为:";C=A+B;C.disp();cout<<endl;*/return0;},,,,,,,,说明分别分开运行,,,,,,,,6、写一个程序,定义抽象类Container:classContainer{protected:doubleradius;public:Container(double抽象类Container的构造函数virtualdoublesurface_area()=0;//纯虚函数surface_areavirtualdoublevolume()=0;//纯虚函数volume};【要求】建立3个继承Container的派生类:SphereCylinderCubesurface_area()volume(),分别用来球体、圆柱体和正方体的表面积和体积。要求写出主程序,应用C++的多态性,分别计算边长为6.0的正方体、半径为5.0的球体,以及半径为5.0和高为6.0的圆柱体的表面积和体积。#include<iostream>#include<string>usingnamespacestd;classcontainer{protected:doubleradius;public:container(doubleradius1);virtualdoublesurface_area()=0;virtualdoublevolume()=0;};container::container(doubleradius1){radius=radius1;}//派生类cube、sphere与cylinderclasscube:publiccontainer{public:cube(doubleradius1):container(radius1){}virtualdoublesurface_area();virtualdoublevolume();};doublecube::surface_area(){return6*radius*radius;}doublecube::volume(){returnradius*radius*radius;}classsphere:publiccontainer{public:sphere(doubleradius1):container(radius1){}virtualdoublesurface_area();virtualdoublevolume();};doublesphere::surface_area(){return4*3.14*radius*radius;}doubl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论