zoukankan      html  css  js  c++  java
  • C++走向远洋——60(项目四、立体类族共有的抽象类)

    */
     * Copyright (c) 2016,烟台大学计算机与控制工程学院
     * All rights reserved.
     * 文件名:text.cpp
     * 作者:常轩
     * 微信公众号:Worldhello
     * 完成日期:2016年6月1日
     * 版本号:V1.0
     * 问题描述: 设计一个抽象类CSolid,含有用于求表面积及体积的两个纯虚函数。设计派生类CCube、CBall、CCylinder,分别表示正方体、球体及圆柱体。在main()函数中,定义CSolid *p;(p是指向基类的指针,且这个基类是个抽象类)。要求利用这个p指针,能够求出正方体、球体及圆柱体对象的表面积及体积。
     * 程序输入:无
     * 程序输出:见运行结果
     */
    #include<iostream>
    using namespace std;
    const double pai=3.1415;
    class Csolid
    {
    public:
    	virtual double SurfaceArea() const=0;
    	virtual double Volume()const=0;
    };
    class CCube:public Csolid
    {
    public:
    	CCube(double len=0);
    	double SurfaceArea()const;
    	double Volume()const;
    private:
    	double length;
    };
    CCube::CCube(double len)
    {
    	length=len;
    }
    double CCube::SurfaceArea()const
    {
    	double c;
    	c=6*length*length;
    	return c;
    }
    double CCube::Volume()const
    {
    	double c;
    	c=length*length*length;
    	return c;
    }
    class CBall:public Csolid
    {
    private:
    	double radius;
    public:
    	CBall(double r=0);
    	double SurfaceArea()const;
    	double Volume()const;
    };
    CBall::CBall(double r)
    {
    	radius=r;
    }
    double CBall::SurfaceArea()const
    {
    	double c;
        c=4*pai*radius*radius;
    	return c;
    }
    double CBall::Volume()const
    {
    	double c;
    	c=pai*radius*radius*radius*4/3;
    	return c;
    }
    class CCylinder:public Csolid
    {
    private:
    	double radius;
    	double height;
    public:
    	CCylinder(double r=0,double high=0);
    	double SurfaceArea()const;
    	double Volume()const;
    };
    CCylinder::CCylinder(double r,double high)  
    {  
        radius=r;  
        height=high;  
    }  
    double CCylinder::SurfaceArea() const  
    {  
        double c;  
        c=2*pai*radius*radius+2*pai*radius*height;  
        return c;  
    } 
    double CCylinder::Volume() const  
    {  
        double c;  
        c=pai*radius*radius*height;  
        return c;  
    }   
    int main( )  
    {  
        Csolid *p;  
        double s,v;  
        CCube x(30);  
        cout<<"立方体边长为 30 "<<endl;  
        p=&x;  
        s=p->SurfaceArea( );  
        v=p->Volume( );  
        cout<<"表面积:"<<s<<endl;  
        cout<<"体积:"<<v<<endl;  
        cout<<endl;  
        CBall y(4.5);  
        cout<<"球体半径为 4.5 "<<endl;  
        p=&y;
        s=p->SurfaceArea( );  
        v=p->Volume( );  
        cout<<"表面积:"<<s<<endl;  
        cout<<"体积:"<<v<<endl;  
        cout<<endl;  
        CCylinder z(10,20);  
        cout<<"圆柱体底面半径、高分别为 10, 20"<<endl;  
        p=&z;  
        s=p->SurfaceArea( );  
        v=p->Volume( );  
        cout<<"表面积:"<<s<<endl;  
        cout<<"体积:"<<v<<endl;  
        cout<<endl;  
        return 0;  
    }  


    运行结果:

  • 相关阅读:
    “sockaddr”: “struct”类型重定义的错误的解决办法《转》
    2019年车险
    tinylib
    命令行利用ffmpeg实现rtmp推流《转》
    Inno setup 判断系统32位还是64位
    vs2015编译OBS-Studio21.1.12
    啃OBS源码-界面汉字
    百年孤独人物关系1
    windows命令行查看文件MD5
    python 玩爬虫安装了一大堆第三方库
  • 原文地址:https://www.cnblogs.com/chxuan/p/8232190.html
Copyright © 2011-2022 走看看