第11周-继承和派生-项目5-类族的设计
来源:互联网 发布:电气画图软件visio 编辑:程序博客网 时间:2024/09/21 06:35
/* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作 者:刘畅 * 完成日期:2015 年 5 月 19 日 * 版 本 号:v1.0 * * 问题描述:按以下的提示,由基类的设计和测试开始,逐渐地完成各个类的设计,求出圆格柱体的表面积、体积并输出并且完成要求的计算任务: (1)先建立一个Point(点)类,包含数据成员x,y(坐标点),实现需要的成员函数,并设计main函数完成测试; (2)以Point为基类,派生出一个Circle(圆)类,增加数据成员r(半径),以及求面积的成员函数area,实现其他需要的成员函数,设计main函数完成测试; (3)再以Circle类为直接基类,派生出一个Cylinder(圆柱体)类,再增加数据成员h(高),,以及求圆柱表面积的成员函数area和求圆柱体积的成员函数volume,实现需要的成员函数,并设计main函数完成测试。 要求编写程序,设计出各类中“需要的成员函数”,包括构造函数、析构函数、修改数据成员和获取数据成员的公共接口、用于输出的重载运算符“<<”函数等。* 程序输入:。。。* 程序输出:点的坐标;圆的半径、面积;圆柱体的高、体积代码如下:#include <iostream>using namespace std;class Point{public: Point(double x=0,double y=0); //构造函数 void setPoint(double,double); //设置坐标值 double getX( ) const { return x; //读x坐标 } double getY( ) const { return y; //读y坐标 } friend ostream & operator<<(ostream &,const Point &);//重载运算符“<<”protected: //受保护成员 double x,y;};Point::Point(double a,double b){ x=a; y=b;}void Point::setPoint(double a,double b){ x=a; y=b;}ostream & operator<<(ostream &output,const Point &p){ output<<"("<<p.x<<","<<p.y<<")"<<endl; return output;}class Circle:public Point //circle是Point类的公用派生类{public: Circle(double x=0,double y=0,double r=0); //构造函数 void setRadius(double); //设置半径值 double getRadius( ) const; //读取半径值 double area ( ) const; //计算圆面积 friend ostream &operator<<(ostream &,const Circle &);//重载运算符“<<”protected: double radius;};Circle::Circle(double a,double b,double r):Point(a,b),radius(r) { }void Circle::setRadius(double r){ radius=r;}double Circle::getRadius( ) const{ return radius;}double Circle::area( ) const{ return 3.14*radius*radius;}ostream &operator<<(ostream &output,const Circle &c){ output<<"Center=("<<c.x<<", "<<c.y<<"), r="<<c.radius<<endl; output<<"Area="<<c.area( )<<endl; return output;}class Cylinder:public Circle{public: Cylinder (double x=0,double y=0,double r=0,double h=0);//构造函数 void setHeight(double); //设置圆柱高 double getHeight( ) const; //读取圆柱高 double area( ) const; //计算圆柱表面积 double volume( ) const; //计算圆柱体积 friend ostream& operator<<(ostream&,const Cylinder&);//重载运算符“<<”protected: double height; //圆柱高};Cylinder::Cylinder(double a,double b,double r,double h) :Circle(a,b,r),height(h) {}void Cylinder::setHeight(double h){ height=h;}double Cylinder::getHeight( ) const{ return height;}double Cylinder::area( ) const{ return 2*Circle::area( )+2*3.14159*radius*height;}double Cylinder::volume() const{ return Circle::area()*height;}ostream &operator<<(ostream &output,const Cylinder& cy){ output<<"Center=("<<cy.x<<","<<cy.y<<"), r="<<cy.radius<<", h="<<cy.height<<endl; output<<"Area="<<cy.area( )<<", Volume="<<cy.volume( )<<endl; return output;}int main( ){ Cylinder cy1(3.5,6.4,5.2,10); cout<<"Original cylinder:\nx="<<cy1.getX( )<<", y="<<cy1.getY( )<<", r=" <<cy1.getRadius( )<<", h="<<cy1.getHeight( )<<endl; cout<<"Area="<<cy1.area()<<",Volume="<<cy1.volume()<<endl; cy1.setHeight(15); cy1.setRadius(7.5); cy1.setPoint(5,5); cout<<endl; cout<<"New cylinder:"<<cy1; return 0;}
运行结果:
1 0
- 第11周-继承和派生-项目5-类族的设计
- C++第10/11周项目 继承与派生 【项目1 - 点-圆-圆柱类族的设计】(复习新版)
- 第10、11周项目 继承和派生3
- 第10-11周项目:继承和派生
- C++第10/11周项目 继承与派生 【项目5 - 摩托车继承自行车和机动车】(复习新版)
- 第11周-阅读继承和派生
- 第11周-继承与派生-项目4-点类派生直线类
- C++第10/11周项目 继承与派生 【点类派生直线类 】(复习新版)
- 第11周-继承与派生-项目2-存储班长信息的学生类(一)
- 第11周-继承与派生-项目二-储存班长信息的学生类(二)
- 第10.11周项目 继承和派生(补充)2
- 第10.11周项目 继承和派生(补充)3
- 第10.11周项目 继承和派生(补充)4
- C++第10/11周项目 继承与派生 【项目3 - 警察和厨师】(复习新版)
- 项目0-是春哥啊(第10,11周补充项目,继承和派生)
- 第13周-项目1-基类中成员的访问限定符和派生类的继承方式
- 第13周项目一-理解基类中成员的访问限定符和派生类的继承方式
- C++第10/11周项目 继承与派生 【项目2 - 存储班长信息的学生类】(复习新版)
- Installing FusionPBX 3.2 on CentOS 6.5 and Mysql
- SQL中存储过程和函数的区别
- Debug Hacks 深入调试的技术和工具(一) 热身准备
- 里氏替换原则:切忌按照常识实现类间的继承关系
- IOS 消息机制(NSNotificationCenter)
- 第11周-继承和派生-项目5-类族的设计
- ios8/sdk8/xcode6/iphone6(+)适配
- 淘宝小铺开张了
- 正确地将对象赋值给对象本身了吗?
- amazon mws基础开发
- mysql workbench 6.3.3 和mysql community serer 5.6.24 关系
- 机器如何区分和判定指令和数据
- Halcon 与 C++ 的类型转换
- Linux学习笔记