C++继承练习5

参考资料:《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
*/

你可能感兴趣的:(C++继承练习5)