第十三周上机实践——项目4-立体类族共有的抽象类

来源:互联网 发布:mp4下载软件 编辑:程序博客网 时间:2024/05/22 15:47
/* *Copyright (c)2016,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:main.cpp,CSolid.h,CSolid.cpp *作    者:郭永恒 *完成日期:2016年5月28日 *版 本 号:v1.0 * *问题描述:设计一个抽象类CSolid,含有用于求表面积和求体积的两个纯虚函数 *设计派生类CCube,CBall,CCylinder */

CSolid.h

#ifndef CSOLID_H_INCLUDED#define CSOLID_H_INCLUDEDclass CSolid{public:    virtual double surfaceArea() = 0;    virtual double volume() = 0;};class CCube:public CSolid{public:    CCube(double l, double w, double h):length(l),width(w),height(h){}    double surfaceArea();    double volume();private:    double length;    double width;    double height;};class CBall:public CSolid{public:    CBall(double r):radius(r){}    double surfaceArea();    double volume();private:    static constexpr double PI = 3.1415926;    double radius;};class CCylinder:public CSolid{    public:    CCylinder(double r, double h):radius(r),height(h){}    double surfaceArea();    double volume();private:    static constexpr double PI = 3.1415926;    double radius;    double height;};#endif // CSOLID_H_INCLUDED
CSolid.cpp

#include "CSolid.h"double CCube::surfaceArea(){    return (length*width + length*height + width*height)*2;}double CCube::volume(){    return length * height * width;}double CBall::surfaceArea(){    return 4 * PI * radius * radius;}double CBall::volume(){    return (4*PI*radius*radius*radius) / 3;}double CCylinder::surfaceArea(){    return 2*PI*radius*height + PI*radius*radius*2;}double CCylinder::volume(){    return PI*radius*radius*height;}

main.cpp

#include <iostream>#include "CSolid.h"using namespace std;int main(){    CSolid *p = nullptr;    CCube cube(1,2,3);    p = &cube;    cout << " 表面积:" << p->surfaceArea() << " 体积:" << p->volume() << endl;    CBall ball(2);    p = &ball;    cout << " 表面积:" << p->surfaceArea() << " 体积:" << p->volume() << endl;    CCylinder cylinder(2,2);    p = &cylinder;    cout << " 表面积:" << p->surfaceArea() << " 体积:" << p->volume() << endl;    return 0;}

运行结果:



0 0