题目描述

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

输入描述:

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

输出描述:

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

话不多说,这次绝对是干货!!!

#include<iostream>
using namespace std;
typedef float ElemType;
#define PI 3.14f
class shape //基类
{
private:
    ElemType x,y;
public:
    shape(ElemType sum){
        x=sum;
    }
    shape(ElemType sumX,ElemType sumY){
        x=sumX; y=sumY;
    }
    ElemType GetX(){return x;}
    ElemType GetY(){return y;}
    virtual ElemType GetArea(){return 0;}
    virtual void Print(){
        cout<<GetArea()<<endl;
    }
};
class Rectangle:public shape //矩形类(继承基类)
{
public:
    Rectangle(ElemType sum):shape(sum){}
    Rectangle(ElemType sumX,ElemType sumY):shape(sumX,sumY){}
    ElemType GetArea(){
        return GetX()*GetY();
    }
    void Print(){
        shape::Print();
    }
};
class Circle:public shape //圆形类(继承基类)
{
public:
    Circle(ElemType sum):shape(sum){}
    ElemType GetArea(){
        return PI*GetX()*GetX();
    }
    void Print(){
        shape::Print();
    }
};
class Square:public Rectangle //正方形类(继承矩形类)
{
public:
    Square(ElemType sum):Rectangle(sum){}
    ElemType GetArea(){
        return GetX()*GetX();
    }
    void Print(){
        shape::Print();
    }
};
int main()
{
    ElemType x,y,r,a;
    cin>>x>>y>>r>>a;
    Rectangle re(x,y);
    re.Print();
    Circle cir(r);
    cir.Print();
    Square sq(a);
    sq.Print();
    return 0;
}
PS:1.当基类存在某一函数,该函数在多个子类都存在时使用虚函数(大体功能相同)
        2.在子类中可调用基类共有部分的任一变量(函数)