動態創建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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM