您的位置:首页 > 编程语言 > C语言/C++

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++ class 测试 system c