C++継承練習5

2092 ワード

参考資料:『C++Primer練習問題集(第5版)』
目的:継承階層の構造を練習します.
#include 
#include 
#include 
using namespace std;

class Figure {//    ,       ;
    public:
        Figure() = default;//      ;
        Figure(double x, double y) : xSize(x), ySize(y) {}//    ;
        virtual ~Figure() = default;//     ;//            ; 
    protected:
        double xSize, ySize;//     ;
};

class Figure_2D : public Figure {//          ;//    Figure    ;
    public:
        Figure_2D(double x, double y) : Figure(x, y) {}//         ;
        virtual double area() = 0;//     ,     ;
        virtual double perimeter() = 0;//     ,     ;       
};

class Figure_3D : public Figure {//          ;//    Figure    ;
    public:
        Figure_3D(double x, double y, double z) : Figure(x, y), zSize(z) {}//         ;
        virtual double cubage() = 0;//     ,     ;
    protected:
        double zSize;//     z ;
};

class Rectangle : public Figure_2D {//   ,   ;
    public:
        Rectangle(double x, double y) : Figure_2D(x, y) {}//    ;
        virtual double area() override {//  ,      ;
            return xSize * ySize;
        }
        virtual double perimeter() {//  ,      ;
            return 2 * (xSize + ySize);
        }
};

class Circle : public Figure_2D {//   ,  ;
    public:
        Circle(double x, double y) : Figure_2D(x, y) {}//    ;
        virtual double area() override {//  ,     ;
            return 3.1415926 * xSize * xSize;//  xSize = ySize =     ;
        }
        virtual double perimeter() {//  ,     ;
            return 2 * 3.1415926 * xSize;//  xSize = ySize =     ;
        }
};

int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    Rectangle *r = new Rectangle(4, 5);
    cout << r -> area() << endl;
    cout << r -> perimeter() << endl;
    Circle *c = new Circle(2, 2);
    cout << c -> area() << endl;
    cout << c -> perimeter() << endl;
    delete c;
    delete r;   
    return 0;
}
/*
20
18
12.5664
12.5664
*/