类的封装与继承——简例

题目来源于牛客网
题目描述

KiKi理解了继承可以让代码重用,他现在定义一个基类shape,私有数据为坐标点x,y, 由它派生Rectangle类和Circle类,它们都有成员函数GetArea()求面积。派生类Rectangle类有数据:矩形的长和宽;派生类Circle类有数据:圆的半径。Rectangle类又派生正方形Square类,定义各类并测试。输入三组数据,分别是矩形的长和宽、圆的半径、正方形的边长,输出三组数据,分别是矩形、圆、正方形的面积。圆周率按3.14计算。

输入描述:

输入三行, 第一行为矩形的长和宽, 第二行为圆的半径, 第三行为正方形的边长。

输出描述:

三行,分别是矩形、圆、正方形的面积。

示例1

输入
7 8
10 5

输出

56
314
25

代码如下:

#include <iostream>
using namespace std;
    class shape
    {
        private:
        int x,y;
    };
    class Rectangle:public shape
    {
        public:
        double GetArea(){return length*width;}
        int length;
        int width;
    } p;
    class Circle:public shape
    {
        public:
        double GetArea() {return 3.14*r*r;}
        int r;
    };
    class Square:public Rectangle
    {
        public:
        double GetArea() {return x*x;}
        int x;
    };
int main()
{
    Rectangle Length,Width;
    Circle R;
    Square X;
    cin>>p.length>>p.width>>R.r>>X.x;
    cout<<p.GetArea()<<endl;
    cout<<R.GetArea()<<endl;
    cout<<X.GetArea()<<endl;
    return 0;
}