您的当前位置:首页正文

C++实验四 多态程序设计)

2024-07-20 来源:小奈知识网
天津理工大学实验报告

学院(系)名称:计算机与通信工程学院 姓名 班级 教学二班 课程名称 实验时间 批改意见 教师签字: 学号 实验项目 高级程序设计语言II 2016年11月11日 第7、8节 专业 计算机科学与技术 实验四 多态程序设计 课程代码 实验地点 成绩 0667026 计算机软件实验室7-215 实验目的: (1)理解类和对象的概念; (2)掌握类与对象的定义方法; (3)理解类的成员的访问控制的含义,公有和私有成员的区别; (4)掌握构造函数和析构函数的含义与作用、定义方式和实现; (5)能够根据给定的要求定义类并实现类的成员函数; (6)掌握string类的使用方法 (7)了解C++面向对象程序设计的基本思想、基本方法和基本步骤; (8)掌握MS Visual C++6.0或DEV C++调试C++程序的基本方法、基本步骤。 实验内容: 1. 定义Point类,有坐标x,y两个成员变量,利用友元函数对Point类重载“++”运算符,实现对坐标值的改变。具体要求如下: (1) 编写程序定义Point类,在类中定义整型的私有成员变量x,y; (2) 在类中定义两个友元函数,分别重载前置++和后置++; (3) 编写主函数测试。 注意函数有无返回值的区别,以及返回值是否带有&应用符号。 代码: #include using namespace std; class Point { private: double x,y; 第1页 共15页

public: Point(double _x=0,double _y=0) { x=_x; y=_y; } ~Point(){} void setx(double _x) { x=_x; } void sety(double _y) { y=_y; } double getx() { return x; } double gety() { return y; } friend void operator<<(ostream &out,const Point &p) { out<<\"Point(\"<Point a(1,1),b(3,4); cout< using namespace std; class Point { private: double x,y; public: Point(double _x=0,double _y=0) { x=_x; y=_y; } ~Point(){} void setx(double _x) { x=_x; 第3页 共15页

} void sety(double _y) { y=_y; } double getx() { return x; } double gety() { return y; } friend void operator<<(ostream &out,const Point &p) { out<<\"Point(\"<3. 定义一个分数类,通过重载运算符实现分数的四则运算、求负运算和赋值运算。其中,要求加法“+” 和减法“-”用友元函数实现重载,其他运算符用成员函数实现重载。 代码: #include #include Using namespace std; class Fenshu { private: int zi; int mu; public: Fenshu(int _zi=0,int _mu=1) { zi=_zi; mu=_mu; } ~Fenshu(){} void setzi(int _zi=0) { zi=_zi; } void setmu(int _mu=1) { mu=_mu; } int getzi() { return zi; } int getmu() { return mu; } 第5页 共15页

void print(); friend Fenshu operator+(const Fenshu& f1,const Fenshu& f2); friend Fenshu operator-(const Fenshu& f1,const Fenshu& f2); Fenshu operator*(int n ) { Fenshu x; x.zi=zi*n; x.mu=mu; return x; } Fenshu operator/(int n) { if(n==0) { cout<<\"Nagetive!\"; return *this; } Fenshu x; x.zi=zi; x.mu=mu*n; return x; } Fenshu operator-() { Fenshu x; x.zi=-zi; x.mu=mu; return x; } void operator=(const Fenshu & f) { zi=f.zi; mu=f.mu; } }; Fenshu operator+(const Fenshu& f1,const Fenshu& f2) { Fenshu f; f.zi=f1.zi*f2.mu+f2.zi*f1.mu; f.mu=f1.mu*f2.mu; return f; } Fenshu operator-(const Fenshu& f1,const Fenshu& f2) { 第6页 共15页

Fenshu f; f.zi=f1.zi*f2.mu-f2.zi*f1.mu; f.mu=f1.mu*f2.mu; return f; } void Fenshu::print() { if(zi==0)cout<<0<mu?zi:mu),_mu=abs(mu_mu?_mu:_zi); mu/=(_zi>_mu?_mu:_zi); cout<4. 编写程序,定义抽象基类Container,由此派生出2个派生类球体类Sphere,圆柱体类Cylinder,分别用虚函数分别计算表面积和体积。 (1) 球体的表面积为:4r2,球体的体积为圆柱体的体积πR2h。 (2) 定义相应的对象,编写主函数测试。 代码如下: #include using namespace std; const double PI=3.14; class Container { private: double r; double h; public: ~Container(){} Container(double _r=0.0,double _h=0.0) { r=_r; h=_h; } void setr(double _r=0.0) { r=_r; } double getr() { 第8页 共15页

4 r3; 圆柱表面积为: 2πR(h+R)3 return r; } void seth(double _h=0.0) { h=_h; } double geth() { return h; } virtual double s()=0; virtual double v()=0; }; class Sphere:public Container { public: ~Sphere(){} Sphere(double _r=0.0):Container(_r){} double s() { return 4*PI*getr()*getr(); } double v() { return (double(4)/3)*PI*getr()*getr()*getr(); } }; class Cylinder:public Container { public: ~Cylinder(){} Cylinder(double _r=0.0,double _h=0.0):Container(_r,_h){} double s() { return 2*PI*getr()*(geth()+getr()); } double v() { return 2*PI*getr()*geth(); } }; 第9页 共15页

int main() { Container *p; Sphere a(1); Cylinder b(1,2); p=&a; cout<<\"Sphere s=\"<s()<<\" v=\"<v()<s()<<\" v=\"<v()< using namespace std; class Time { private: int hour; int minute; int second; public: Time(int=0,int=0,int=0); ~Time(){} void sethour(int); void setminute(int); void setsecond(int); int gethour(); int getsecond(); 第10页 共15页

int getminute(); void set(int=0,int=0,int=0); void show(); Time& operator++(int); Time& operator--(int); }; Time::Time(int h,int m,int s) { if(s>59) { s%=60; m=m+s/60; } if(m>59) { m%=60; h=h+m /60; } if(h>23) h%=24; hour=h; minute=m; second=s; } void Time::sethour(int h) { if(h>23) h%=24; hour=h; } void Time::setminute(int m) { if(minute>59) { minute%=60; hour=hour+minute/60; } if(hour>23) hour%=24; minute=m; } void Time::setsecond(int s) { if(s>59) { minute=minute+s/60; s%=60; 第11页 共15页

} if(minute>59) { hour=hour+minute/60; minute%=60; } if(hour>23) hour%=24; second=s; } int Time::gethour() { return hour; } int Time::getsecond() { return second; } int Time::getminute() { return minute; } void Time::set(int h,int m,int s) { if(s>59) { m=m+s/60; s%=60; } if(m>59) { h=h+m /60; m%=60; } if(h>23) h%=24; hour=h; minute=m; second=s; } void Time::show() { cout<} Time& Time::operator++(int) { second++; if(second>59) { minute=minute+second/60; second%=60; } if(minute>59) { hour=hour+minute /60; minute%=60; } if(hour>23) hour%=24; return *this; } Time& Time::operator--(int) { second--; if(second<0) { minute--; second=59; } if(minute<0) { minute=59; hour--; } if(hour<0)hour=0; return *this; } int main() { Time t; int x,y,z; char temp; cout<<\"现在初始化计数器(Hour Minute Second):\"; cin>>x;cin>>y;cin>>z; t.set(x,y,z); cout<<\"现在时间是:\"; 第13页 共15页

t.show(); do { cout<<\"输入*重新设置计数器;\"<\"; cin>>temp; switch(temp) { case '*': cout<<\"现在初始化计数器(Hour Minute Second):\"; cin>>x;cin>>y;cin>>z; t.set(x,y,z); cout<<\"现在时间是:\"; t.show(); break; case '+': t++; cout<<\"现在时间是:\"; t.show(); break; case '-': t--; cout<<\"现在时间是:\"; t.show(); break; case 'o': t.set(0,0,0); cout<<\"现在时间是:\"; t.show(); break; case 'q': break; default: cout<<\"请输入正确的数据!\"<运行结果如下: 第15页 共15页

因篇幅问题不能全部显示,请点此查看更多更全内容