河北工业大学-C实验报告实验四.doc
.1、编写一个程序,要求:(1)生明一个类Complex(复数类),定义类Complex的两个对象c1和c2,对象c1通过构造函数直接指定复数的实部和虚部(类私有数据成员为double类型:real和imag)为2.5及3.7,对象c2通过构造函数直接指定复数的实部和虚部为4.2及6.5;(2)定义友元运算符重载函数,它以c1、c2对象为参数,调用该函数时能返回两个复数对象相加操作;(3)定义成员函数print,调用该函数时,以格式“real+imag i”输出当前对象的实部和虚部,例如:对象的实部和虚部分别是4.2和6.5,则调用print函数输出格式为:4.2+6.5 i;(4)编写主程序,计算出复数对象c1和c2相加结果,并将其结果输出。#includeusing namespace std;class Complex public: Complex(double r=0.0,double i=0.0); friend Complex operator+ (Complex& a,Complex& b); void printf(); private: double real; double imag;Complex:Complex(double r,double i)real=r;imag=i;Complex operator+ (Complex& a,Complex& b)Complex temp;temp.real=a.real+b.real;temp.imag=a.imag+b.imag;return temp;void Complex:printf()cout0)cout+;if(imag!=0)coutimagiendl;void main()Complex c1(2.5,3.7),c2(4.2,6.5),c3;c3=c1+c2;c3.printf();2、编写一个程序,其中设计一个时间类Time,用来保存时、分、秒等私有数据成员,通过重载操作符“+”实现两个时间的相加。要求将小时范围限制在大于等于0,分钟范围限制在059分,秒钟范围限制在059秒。提示:时间类Time的参考框架如下:class Time public: Time(int h=0,int m=0,int s=0);/构造函数 Time operator+(Time &);/运算符重载函数,实现两个时间的相加 void disptime();/显示时间函数 private: int hours,minutes,seconds;#includeusing namespace std;class Timepublic:Time(int h=0,int m=0,int s=0);/构造函数 Time operator+(Time &);/运算符重载函数,实现两个时间的相加 void disptime();/显示时间函数 private:int hours;intminutes;int seconds;Time:Time(int h,int m,int s)hours=h;minutes=m;seconds=s;Time Time:operator+(Time& t)int h,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;void Time:disptime()couthours:minutes:seconds.endl;void Input(int &h,int &m,int &s)couth ;cinm ;cins ;while(m59|s59) cout*时间输入错误!请重新输 !*n;couth ;cinm ;cins ;int main()int h1,m1,s1,h2,m2,s2;Input(h1,m1,s1);Input(h2,m2,s2);Time A(h1,m1,s1),B(h2,m2,s2);A=A+B ;A.disptime();return 0;3、用友元运算符函数或成员运算符函数,重载运算符“+”、“-”、“*”,实现对实验二中实现的矩阵类的对象的加、减、乘法。#include#define hang 2#define lie 2class Matrixprivate:int Row;int Column;int MATRIXhanglie;public:Matrix(int r,int c)Row=r;Column=c;Matrix() void TypeMatrix();void Print() const;Matrix& operator = (const Matrix& rhs);Matrix operator + (const Matrix& rhs);Matrix operator - (const Matrix& rhs);void Matrix:TypeMatrix()std:cout请输入矩阵:std:endl;for(int i=0;ihang;i+)for(int j=0;jMATRIXij;void Matrix:Print() conststd:cout矩阵的结果为:std:endl;for(int q=0;qhang;q+)for(int s=0;slie;s+)std:coutMATRIXqst;if(s=lie-1)std:coutstd:endl;Matrix& Matrix:operator = (const Matrix& rhs)if(this!=&rhs)for(int g=0;ghang;g+)for(int h=0;hMATRIXgh=rhs.MATRIXgh;return *this;Matrix Matrix:operator + (const Matrix& rhs)int i,j;for(i=0;ihang;i+)for(j=0;jMATRIXij+rhs.MATRIXij;return *this ;Matrix Matrix:operator - (const Matrix& rhs)int i,j;for(i=0;ihang;i+)for(j=0;jMATRIXij-rhs.MATRIXij;return *this ;int main()Matrix a,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类的框架,用于完成集合基本运算所需的各项功能。class Set public: Set(); void input(int d);/向集合中添加一个元素 int length();/返回集合中的元素个数 int getd(int i);/返回集合中位置i的元素 void display();/显示集合的所有元素 Set operator+(Set s1);/成员运算符重载函数,实现集合的并运算 Set operator-(Set s1);/成员运算符重载函数,实现集合的差运算 Set operator*(Set s1);/成员运算符重载函数,实现集合的交运算 Set operator=(Set s1);/成员运算符重载函数,实现集合的赋值运算 protected: int len;/统计结合中元素的个数; int sMAX;/存放集合中的元素 ;#includeusing namespace std;const int MAX = 50;class set public: set(); void input(int d); int length(); int getd(int i); void disp(); set operator+(set s1);set operator-(set s1);set operator*(set s1);set operator=(set s1); protected:int len;int sMAX;set:set()len = 0;/s =0;cout *建立一个集合*n;void set:input(int d)len = d;cout 输入集合元素 d 个:;for(int i = 0; i si ;int set:length()int n=0;while(sn != 0)n+;return n;int set:getd(int i)return 0;void set:disp()for (int i = 0; i len; i+)cout si ;/cout endl;set set:operator+(set s1) /-并运算-/strcat(s,s1.s); for (int i = 0; i len; i+) for(int j = 0; j s1.len; j+) /在s1.s中选出不相同的 if(si = s1.sj) /选出相同的元素删掉得到s1.s与s不同的元素 for (;j s1.len; j+)s1.sj = s1.sj+1; -s1.len; for (int j = 0;j s1.len; j+ ) / 将s1.s中不相同的加在s后面 slen = s1.sj; len+; slen+s1.len = 0; return *this;set set:operator-(set s1) /-差运算-int t;for (int i = 0; i s1.len; i+) for(int j = 0; j len; j+) if(s1.si = sj ) /选出s与s1.s中相同的元素并且删除掉 t = j; for (;t len; t+)st = st+1;-len; return *this;set set:operator*(set s1) / -交运算-int mMAX;int l = 0;for (int i = 0; i s1.len; i+) for(int j = 0; j len; j+) / 选出相同的元素 if(s1.si = sj) ml = sj; l+; for (i = 0; i l; i+)si = mi;sl = 0;len = l;return *this;set set:operator=(set s1)for (int i = 0; i s1.length(); i+) si = s1.si;len = s1.len;return *this;int main()int n;set C;set A;cout n; A.input(n);set B;cout 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;*/return 0;说明分别分开运行6、写一个程序,定义抽象类Container:class Container protected: double radius; public: Container(double r);/抽象类Container的构造函数 virtual double surface_area()=0;/纯虚函数surface_area virtual double volume()=0;/纯虚函数volume ;【要求】建立3个继承Container的派生类:Sphere(球体)、Cylinder(圆柱体)、Cube(正方体),让每一个派生类都包含虚函数surface_area()和volume(),分别用来球体、圆柱体和正方体的表面积和体积。要求写出主程序,应用C+的多态性,分别计算边长为6.0的正方体、半径为5.0的球体,以及半径为5.0和高为6.0的圆柱体的表面积和体积。#include#includeusing namespace std;class container protected: double radius; public: container(double radius1); virtual double surface_area()=0; virtual double volume()=0;container:container(double radius1)radius=radius1;/派生类cube、sphere与cylinderclass cube : public container public: cube(double radius1):container( radius1 ) virtual double surface_area(); virtual double volume();double cube : surface_area() return 6*radius*radius;double cube : volume()return radius*radius*radius;class sphere : public container public: sphere(double radius1):container( radius1 ) virtual double surface_area(); virtual double volume(); ;double sphere : surface_area() return 4*3.14*radius*radius;double sphere : volume()return 4.0/3.0*3.14*radius*radius*radius;class cylinder : public container protected: double high; public: cylinder(double high1,double radius1):container(radius1) high=high1; virtual double surface_area(); virtual double volume(); ;double cylinder : surface_area() return 2*3.14*radius*radius+2*3.14*high*radius;double cylinder : volume()return 3.14*radius*radius*high;int main() container *p; cube cc(6.0); sphere ss(5.0); cylinder cy(6.0,5.0); p=&cc; cout正方体的表面积:surface_area()endl; cout正方体的体积:volume()endl; p=&ss; cout球体的表面积:surface_area()endl; cout球体的体积:volume()endl; p=&cy; cout圆柱体的表面积:surface_area()endl; cout圆柱体的体积:volume()endl; return 0;
收藏