• 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;  
    }  


    运行结果:

  • 相关阅读:
    遍历 HashMap 的 5 种最佳方式
    Spring注入方式
    搜索引擎
    MySQL 中常见的时间类型有三种 DATE, DATETIME 和 TIMESTAMP
    向Arcglobe中添加MouseWheel事件,使其具有鼠标放大缩小功能。
    js eval
    鼠标指针图标:C#设置鼠标指针图标(转)
    对象模型图【OMD】阅读指南(转)
    ArcGIS 9.3 VBA 环境不可用问题的解决
    用实例学ASP.net2.0的CallBack机制[一] 20080308 11:33
  • 原文地址:https://www.cnblogs.com/chxuan/p/8232190.html
Copyright © 2020-2023  润新知