题目描述
KiKi理解了继承可以让代码重用,他现在定义一个基类shape,私有数据为坐标点x,y, 由它派生Rectangle类和Circle类,它们都有成员函数GetArea()求面积。派生类Rectangle类有数据:矩形的长和宽;派生类Circle类有数据:圆的半径。Rectangle类又派生正方形Square类,定义各类并测试。输入三组数据,分别是矩形的长和宽、圆的半径、正方形的边长,输出三组数据,分别是矩形、圆、正方形的面积。圆周率按3.14计算。
输入描述:
输入三行,
第一行为矩形的长和宽,
第二行为圆的半径,
第三行为正方形的边长。
输出描述:
三行,分别是矩形、圆、正方形的面积。
解题思路
主要考察虚函数,虚函数是动态绑定,在运行时绑定。根据数据的类型,来决定调用哪个。
代码
#include<iostream> using namespace std; class Shape//基类Shape { public: virtual float GetArea() { return 0.0; }//为了实现重用,将求面积函数GetArea定义为虚函数 }; class Rectangle : public Shape//派生类Rectangle,继承***pe { int x;//私有成员x,y。class默认为私有的 int y; public: void setRectangle(int m, int n)//赋值给x和y { x = m; y = n; } virtual float GetArea() { return x * y; }//虚函数,根据数据类型决定调用哪一个 }; class Circle :public Shape { int r;//私有成员r。class默认为私有的 public: void setCircle(int x) { r = x; } virtual float GetArea() { return r * r * 3.14; }//虚函数,根据数据类型决定调用哪一个 }; class Square :public Rectangle { int m;//私有成员m。class默认为私有的 public: void setSquare(int x) { m = x; } virtual float GetArea() { return m * m; }//虚函数,根据数据类型决定调用哪一个 }; int main() { Rectangle r; Circle c; Square s; int a, b, d, e; cin >> a >> b >> d >> e; r.setRectangle(a, b); c.setCircle(d); s.setSquare(e); cout<<r.GetArea()<<endl; cout<<c.GetArea()<<endl; cout<<s.GetArea()<<endl; return 0; }