zoukankan      html  css  js  c++  java
  • 动态创建3类对象,通过基类的指针指向派生类对象,并调用派生类对象相应函数

    任务描述:

    定义抽象类Shape,在此基础上派生出圆类Circle、正方形类Square、三角形类Triangle,3个派生类都有构造函数,输入和显示信息函数Input()、Show(),计算面积的函数Area(),计算周长的函数Perim()。完成以上类的编写,在主函数中动态创建3类对象,通过基类的指针指向派生类对象,并调用派生类对象相应函数。

    源代码:

    #include <iostream>
    #include <cmath>
    using namespace std;
    const double PI=3.14159;
    //定义抽象基类Shape
    class Shape
    {
    public:
        virtual double Area() const =0; 
        virtual double Perim() const =0;
        virtual void Input() =0;
        virtual void Show()=0;
        virtual void ShowName()=0;
    };
    //定义Circle(圆形)类
    class Circle:public Shape
    {
    public:
        Circle(double r):radius(r){}     
        
        void Input(){
            cin>>radius;
        }
    
         void ShowName(){
            cout<<"*******圆形********"<<endl;
        }
    
         double Perim() const {
            return 2*PI*radius;
        }
    
         double Area() const {
            return radius*radius*PI;
        }
    
        void Show(){
            cout<<"radius="<<radius<<endl;
            cout<<"Area="<<Area()<<endl;
            cout<<"Perim="<<Perim()<<endl<<endl;
        }                                    
        
    protected:
        double radius;                                                 
    };
    
    //定义Square(正方形)类
    class Square:public Shape
    {public:
        Square(double s):side(s){}                                          
        
        void Input(){
            cin>>side;
        }
    
         void ShowName(){
            cout<<"*******正方形********"<<endl;
        }
    
         double Perim() const {
            return 4*side;
        }
    
         double Area() const {
            return side*side;
        }
    
        void Show(){
            cout<<"side="<<side<<endl;
            cout<<"Area="<<Area()<<endl;
            cout<<"Perim="<<Perim()<<endl<<endl;
        }  
    
    protected:
        double side;
    };
    
    //定义Triangle(三角形)类
    class Triangle:public Shape
    {
    public:
        Triangle(double aa,double bb,double cc):a(aa),b(bb),c(cc){}               
        
        void Input(){
            cin>>a>>b>>c;
        }
    
         void ShowName(){
            cout<<"*******三角形********"<<endl;
        }
    
         double Perim() const {
            return a+b+c;
    
        }
    
         double Area() const {
             double per;
                per=(a+b+c)/2;
            return sqrt(per*(per-a)*(per-b)*(per-c));
        }
    
        void Show(){
            cout<<"a,b,c="<<a<<" "<<b<<" "<<c<<endl;
            cout<<"Area="<<Area()<<endl;
            cout<<"Perim="<<Perim()<<endl<<endl;
        }  
    
    
    protected:
        double a,b,c;                                            
    };
    
    int main()
    {
    
        Shape* sh[3];
    
        Circle c(0);
        sh[0]=&c;
        sh[0]->Input();
        sh[0]->ShowName();
        sh[0]->Show();
        sh[0]->Area();
        sh[0]->Perim();
    
        Square s(0);
        sh[1]=&s;
        sh[1]->Input();
        sh[1]->ShowName();
        sh[1]->Show();
        sh[1]->Area();
        sh[1]->Perim();
    
        Triangle t(0,0,0);
        sh[2]=&t;
        sh[2]->Input();
        sh[2]->ShowName();
        sh[2]->Show();
        sh[2]->Area();
        sh[2]->Perim();
    
        cout<<"Total of all Areas="<<c.Area()+s.Area()+t.Area()<<endl;
        cout<<"Total of all Perims="<<c.Perim()+s.Perim()+t.Perim()<<endl;
         return 0;
    }

    输入:

    12.7 3.9 5 6 7

    测试结果:

    *******圆形********
    radius=12.7
    Area=506.707
    Perim=79.7964
    
    *******正方形********
    side=3.9
    Area=15.21
    Perim=15.6
    
    *******三角形********
    a,b,c=5 6 7
    Area=14.6969
    Perim=18
    
    Total of all Areas=536.614
    Total of all Perims=113.396
  • 相关阅读:
    export default 和 export 的使用方式(六)
    webpack结合vue使用(五)
    webpack 中导入 vue 和普通网页使用 vue 的区别(四)
    普通组件定义渲染和render渲染组件的区别(三)
    代码规范
    vue切换路由时,取消所有axios请求
    JS设计模式-策略模式
    CSS世界(张鑫旭)系列学习总结 (五)内联元素与流
    Vue中Jsx的使用
    Vue事件总线(EventBus)
  • 原文地址:https://www.cnblogs.com/junfblog/p/12803267.html
Copyright © 2011-2022 走看看