C++上机实验
更新时间:2024-06-25 07:48:01 阅读量: 综合文库 文档下载
实验项目名称:多态性实现 实验项目编号:实验3 学号: 组号:
上机实践日期:2017/6/4 上机实践时间:14:00
一、目的
(1) 掌握多态的概念。
(2) 理解静态多态性和动态动态性的含义。 (3) 掌握使用虚函数和继承实现动态多态性的方法。 (4) 掌握运算符重载的方法。 二、实验内容与设计思想
1.设有几何图形的派生关系如下图所示。
几何图形 geometric_shape)矩形 rectangle 圆 circle 三角形(triangle)长方体 box)圆柱 cylinder)圆锥 cone)三棱锥(t_pyramid)三棱柱(t_prism) 平面图形可求周长和面积,对立体图形可以求体积以及底面图形的周长和底面积。
设有主函数如下:
int main() {
Geometric_shape * gs[]={new
Circle(10),new
Rectangle(6,8),new Triangle(3,4,5),
new Box(6,8,3),new Cylinder(10,3),new
Cone(10,3),new T_pyramid(3,4,5,3),new T_prism(3,4,5,3)};
for (int i=0;i<8;i++)
{ gs[i]->Show();
cout< { gs[i]->Show(); cout< } cout<<\平面图形:\ for (i=0;i<3;i++) 对 { cout<<\图形周长:\ cout<<\图形面积:\ cout<<\图形体积:\ } cout<<\立体图形:\ for (i=3;i<8;i++) { cout<<\图形底周长:\ cout<<\图形底面积:\ cout<<\图形体积 :\ } } return 0; 请编写各类的定义和实现代码,使给定的主函数main可以正确运行。 实验代码: #include class Geometric_shape//几何图形 { public: virtual void show() {}; virtual double perimeter() { return 0; };//周长 virtual double area(){ return 0; };//面积 virtual double volume(){ return 0; };//体积 }; class Circle:public Geometric_shape //圆 { public: Circle(int r) :radius(r) {}; virtual void show() { cout << \圆的半径为:\ << radius << endl; } virtual double perimeter() { return 2 * pi*radius; } virtual double area() { return pi*radius*radius; } virtual double volume() { return 0; } protected: int radius; }; class Rectangle :public Geometric_shape //矩形 { public: Rectangle(int lenth, int width) :Lenth(lenth), Width(width) {} virtual void show() { cout << \矩形长宽分别为:\ << Lenth << \ << Width << endl; } virtual double perimeter() { return 2 * (Lenth + Width); } virtual double area() { return Lenth*Width; } virtual double volume() { return 0; } protected: int Lenth; int Width; }; class Triangle :public Geometric_shape //三角形 { public: Triangle(int a, int b, int c) :A(a), B(b), C(c) {}; void show() { cout << \三角形三边分别为:\ << A << \ << B << \ << C << endl; } virtual double perimeter() { return A + B + C; } virtual double area() { double p=(A+B+C)/2; return sqrt(p*(p - A)*(p - B)*(p - C)); } virtual double volume() { return 0; } protected: int A, B, C; }; class Box : public Rectangle //长方形 { public: Box(int a,int b, int c):Rectangle(a,b), Height(c){} void show() { cout << \长方体的长宽高分别为:\ << Lenth << \ << Width << \<< Height< class Cylinder :public Circle //圆柱 { public: Cylinder(int a, int b) :Circle(a), Height1(b) {} void show() { cout << \圆柱底面半径和高度分别为:\ << radius << \ << Height1 << endl; } double volume() { return area()*Height1; } private: int Height1; }; class Cone :public Circle //圆锥 { public: Cone(int a, int b) :Circle(a), Height2(b) {} void show() { cout << \圆锥底面半径和高度分别为:\ << radius << \ << Height2 << endl; } double volume() { return area()*Height2/3; } private: int Height2; }; class T_pyramid :public Triangle //三棱锥 { public: T_pyramid(int a, int b, int c, int d) :Triangle(a, b, c), Height3(d) {} void show() { cout << \三棱锥底边三角形三边和高度分别为:\ << A << \ << B << \ << C << \\ << Height3 << endl; } double volume() { return area()*Height3 / 3; } private: int Height3; }; class T_prism :public Triangle //三棱柱 { public: T_prism(int a, int b, int c, int d) :Triangle(a, b, c), Height4(d) {} void show() { cout<<\三棱柱底边三角形三边和高度分别为:\ << A << \ << B << \ << C << \ << Height4 << endl; } double volume() { return area()*Height4; } private: int Height4; }; int main() { Geometric_shape * gs[] = { New Circle(10),new Rectangle(6,8),new Triangle(3,4,5), new Box(6,8,3),new Cylinder(10,3),new Cone(10,3), new T_pyramid(3,4,5,3),new T_prism(3,4,5,3) }; int i; for ( i = 0; i<8; i++) { gs[i]->show(); cout << endl; } cout << \平面图形:\ << endl; for (i = 0; i<3; i++) { cout << \图形周长:\ << gs[i]->perimeter() << '\\t'; cout << \图形面积:\ << gs[i]->area() << '\\t'; cout << \图形体积:\ << gs[i]->volume() << endl; } cout << \立体图形:\ << endl; for (i = 3; i<8; i++) { cout << \图形底周长:\ << gs[i]->perimeter() << '\\t'; cout << \图形底面积:\ << gs[i]->area() << '\\t'; cout << \图形体积 :\ << gs[i]->volume() << endl; } return 0; } 2. 为复数重载+、-运算符,编程实现(6+7i)+(7+8i)和(6+7i)-(7+8i)的运算。 实验代码: #include public: Complex(double r = 0.0, double i = 0.0):real(r),imag(i) {} Complex operator+ (Complex &c2);// 运算符“+”重载为成员函数 Complex operator- (Complex &c2);// 运算符“-”重载为成员函数 //friend Complex operator+ (Complex &c1, Complex &c2);// 运算符“+”重载为友元函数 //friend Complex operator- (Complex &c1, Complex &c2);// 运算符“-”重载为友元函数 void display(); // 复数输出 private: double real; double imag; }; Complex Complex::operator+(Complex &c2) { Complex c; c.real = real + c2.real; c.imag = imag + c2.imag; return c; } Complex Complex::operator-(Complex &c2) { Complex c; c.real = real - c2.real; c.imag = imag - c2.imag; return c; } void Complex::display() { cout << real; if (imag >= 0) cout << \; cout << imag << \ << endl; } /* 友元函数定义 Complex operator+ (Complex &c1, Complex &c2) { Complex c; c.real = c1.real + c2.real; c.imag = c1.imag + c2.imag; return c; } Complex operator- (Complex &c1, Complex &c2) { Complex c; c.real = c1.real - c2.real; c.imag = c1.imag - c2.imag; return c; } */ int main() { Complex c1(6, 7), c2(7, 8); cout << \; c1.display(); } cout << \; c2.display(); cout << \; (c1 + c2).display(); cout << \; (c1 - c2).display(); return 0; 三、实验使用环境 Windows 10 vs2017 四、实验小结 1)题(1)用虚函数来实现主程序中的动态联编。即在Geometric_shape类中分别将计算面积、周长、体积等函数声明为虚函数后,再在该类的派生类中定义与其基类虚函数原型相同的函数。当用基类指针指向这些派生类的对象时,系统会自动用派生类中的同名函数来代替基类中的虚函数,从而实现运行时的多态。学习使用虚函数实现动态多态性。而虚函数就是在基类中被关键字virtual说明,并在派生类中重新定义的函数,且在派生类中重工业新定义时,函数原型,包括返回类型、函数名、参数个数与参数类型的顺序,都必须与基类中的完全相同。此外,构造函数不能是虚函数,但析构函数可以是虚函数。 2)题(2)用成员函数和友元函数两种方式实现。友元函数函数实现时,在类体内声明为该类的友元函数,然后再重载运算符 } cout << \; c2.display(); cout << \; (c1 + c2).display(); cout << \; (c1 - c2).display(); return 0; 三、实验使用环境 Windows 10 vs2017 四、实验小结 1)题(1)用虚函数来实现主程序中的动态联编。即在Geometric_shape类中分别将计算面积、周长、体积等函数声明为虚函数后,再在该类的派生类中定义与其基类虚函数原型相同的函数。当用基类指针指向这些派生类的对象时,系统会自动用派生类中的同名函数来代替基类中的虚函数,从而实现运行时的多态。学习使用虚函数实现动态多态性。而虚函数就是在基类中被关键字virtual说明,并在派生类中重新定义的函数,且在派生类中重工业新定义时,函数原型,包括返回类型、函数名、参数个数与参数类型的顺序,都必须与基类中的完全相同。此外,构造函数不能是虚函数,但析构函数可以是虚函数。 2)题(2)用成员函数和友元函数两种方式实现。友元函数函数实现时,在类体内声明为该类的友元函数,然后再重载运算符
正在阅读:
C++上机实验06-25
(人教版)中考化学复习导学案:专题十二酸和碱的性质06-08
信息隐藏 实验十一 LSB信息隐藏的RS分析 - 图文03-16
外国文学常识试题03-29
第07章 原子结构 习题解答12-06
《美丽人生》摄影作品研究12-05
我是你的骄傲吗02-14
建设工程项目管理模拟试卷06-12
增值税专用发票抵扣情况表06-02
法国时装02-17
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- C++
- 上机
- 实验
- 基于Unity3D的跨平台格斗游戏设计毕业论文
- 金色眼镜蛇演习 - 图文
- 重庆工商大学义工志愿者协会“义路有你”十周年庆典活动策划书
- 苏教版语文五年级上册单元要点总结及练习
- 基于Apache源代码的Web应用服务器的体系结构分析 论文
- 人教版小学四年级语文下册课外阅读题练习及答案
- 炼铁厂3号高炉施工方案(土建部分)
- 英语学案必修六答案(人教版)
- 移动互联网怎么走 李彦宏心里最有数
- 很多电子工程师在某个方面精深钻研
- 2016最新最全超星《形象管理》满分考试题库
- 35KV变电站防雷接地技术 合格版本
- 眼科实习日记
- 八年级英语上册总复习 书面表达专题练习50套 - 图文
- 心肺复苏预案剧本
- 贵州省思南中学高一第一学期考试数学试题
- 雷锋月回收旧书活动策划方案
- 2011经典销售业务流程
- 高速线材在轧制过程中产生堆钢的原因及处理
- 2017年中国再生革行业现状及市场前景预测(目录)