【基础练习】设计类继承
KiKi设计类继承
http://www.nowcoder.com/questionTerminal/699ba050e2704591ae3e62401a856b0e
题目描述
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;
}