C++第十周【任务3】类的继承和派生
2012-04-23 19:17
549 查看
/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称: C++第十周【任务3】 * 作 者: 李洪悬 * 完成日期: 2012 年 4 月 23 日 * 版 本 号: * 对任务及求解方法的描述部分 * 输入描述: * 问题描述:类的继承和派生
* 程序头部的注释结束 */
【任务3】 (1)先建立一个Point(点)类,包含数据成员x,y(坐标点); (2)以Point为基类,派生出一个Circle(圆)类,增加数据成员 (半径); (3)再以Circle类为直接基类,派生出一个Cylinder(圆柱体)类,再增加数据成员h(高)。 要求编写程序,设计出各类中基本的成员函数(包括构造函数、析构函数、修改数据成员和获取数据成员的公共接口、用于输出的重载运算符“<<”函数等),使之能用于处理以上类对象,最后求出圆格柱体的表面积、体积并输出。 (提示:此任务可以分为三个子任务分成若干步骤进行。先声明基类,再声明派生类,逐级进行,分步调试。——这种方法适用于做任何的项目) (1)第1个程序: 基类Point类及用于测试的main()函数 (2)第2个程序:声明Point类的派生类Circle及其测试的main()函数 (3)第3个程序:声明Circle的派生类Cylinder及测试的main()函数
#include<iostream> #include<Cmath> using namespace std; class Point //定义点类 { public: double x,y; //点的横坐标和纵坐标 public: Point() { x=0; y=0; } Point::Point(double x0,double y0):x(x0),y(y0){} void PrintP() { cout<<"Point:("<<x<<","<<y<<")"<<endl; } }; class Circle: public Point //利用坐标点类定义直线类, 其基类的数据成员表示直线 { protected: double radiu; class Point pt1,pt2; //半径的两个端点 public: Circle::Circle(double x0,double y0,double r):Point(x0,y0),radiu(r){} Circle(Point pts, Point pte); //构造函数 double Dx() { return pt2.x-pt1.x; } double Dy() { return pt2.y-pt1.y; } double Length();//计算半径的长度 double Area();//计算圆的面积 void PrintL(); //输出长度和面积 void setradiu();//获取半径的长度 }; //构造函数,分别用参数初始化对应的端点及由基类属性描述的中点 Circle::Circle(Point pts, Point pte) { pt1=pts; pt2=pte; } double Circle::Length()//计算半径的长度 { return (sqrt(Dx()*Dx()+Dy()*Dy())); }; double Circle::Area() { return(3.14*Length()*Length()); } void Circle::PrintL() { cout<<" 1st "; pt1.PrintP(); cout<<"\n 2nd "; pt2.PrintP(); cout<<"\n The Length of Radius: "<<Length()<<endl; cout<<"\n The Area of Cirle: "<<Area()<<endl; } void Circle::setradiu() { radiu=Length(); } class Cylinder : public Circle { public: Cylinder(double x0,double y0,double r,double h):Circle(x0,y0,r),hei(r){} double volu(); void printv(); private: double hei; }; double Cylinder::volu() { return (Area()*hei); } void Cylinder :: printv() { cout<<"\n The Volume of Cylinder: "<<volu()<<endl; } int main() { Point ps(-2,5),pe(7,9); Circle l(ps,pe); Cylinder v(5); l.PrintL();//输出半径l的信息 v.printv(); //输出圆柱的体积 system("pause"); return 0; }经验积累:派生类的构造函数要联系一级一级来!别着急!
相关文章推荐
- C++第十二周【任务2】定义Teacher(教师)类和Cadre(干部)类,采用多重继承方式由这两个类派生出新类Teacher_Cadre(教师兼干部)。
- 第十周实验指导--任务1--由坐标点类派生出直线类--继承与派生
- 第十周C++【任务3】建立一个Point(点)类,派生出一个Circle(圆)类,派生出一个Cylinder(圆柱体)类
- C++课程小结 继承与派生
- C++:继承、派生、多继承、补充:匈牙利命名法
- C++ 之 继承和派生(1)
- C++继承与派生
- c++之继承与派生
- 第十周实验指导--任务2--定义一个名为CPerson的类,并在此基础上派生出CEmployee类
- C++继承与派生 笔记
- 第十周阅读程序(1):继承与派生
- c++第十周【任务0】理解基类、派生类中构造函数、析构函数
- C++的继承与派生(一)
- 第十周任务三:派生类的派生
- c++第四次实验---继承和派生
- c++ 类的继承与派生
- C++第四次实验——派生和继承1
- C++之继承与派生(1)
- C++复习(3):类的一系列操作.继承与派生
- C++之继承与派生(3)