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


    运行结果:

  • 相关阅读:
    linux常用命令
    mysql 开发基础系列20 事务控制和锁定语句(上)
    sql server 性能调优之 资源等待 CXPACKET
    mysql 开发基础系列19 触发器
    mysql 开发基础系列18 存储过程和函数(下)
    mysql 开发基础系列17 存储过程和函数(上)
    sql server 性能调优之 资源等待PAGEIOLATCH
    mysql 开发基础系列16 视图
    mysql 开发基础系列15 索引的设计和使用
    sql server 性能调优之 当前用户请求分析 (1)
  • 原文地址:https://www.cnblogs.com/chxuan/p/8232190.html
Copyright © 2011-2022 走看看