题目:
建立一个形状类Shape作为基类,派生出圆类Circle和矩形类Rectangle,求出面积并获取相关信息。具体要求如下:
1、形状类Shape
(1)保护数据成员
double x,y; //对于不同的形状,x和y表示不同的含义,如对于圆,x和y均表示圆的半径,而对于矩形,x表示矩形的长, y表示矩形的宽。
(2)公有成员函数
Shape(double m_x,double m _y);
double GetArea();
(2)圆类Circle,从Shape公有派生
(a)公有成员函数
Circle(double r);
double GetArea(); //求圆的面积。
double GetRadius(); //获取圆的半径。
(3)矩形类Rectangle,从Shape公有派生
(a)公有成员函数
Rectangle(double l,double w);
double GetArea(); //求矩形的面积。
double GetLength(); //获取矩形的长。
double GetWidth(); //获取矩形的宽。
(4)在主函数中对派生类进行测试。
解答:
1、首先,根据题中给出的类的成员变量可以分别写类的成员函数
#include<iostream>
using namespace std;
class Shape
{
protected:
double m_x,m_y; //访问权限定义为保护类型是为了能被继承下去,以便派生类能直接访问m_x和m_y
public:
Shape(double x,double y); //初始化m_x、m_y
double GetArea(); //求面积,在此返回0.0
};
Shape::Shape(double x,double y)
{
m_x = x;
m_y = y;
}
double Shape::GetArea()
{
return 0.0;
}
2、继续完成Shape类派生出的Circle类和Rectangle类的成员函数
注意:(1)Circle类和Rectangle类编写构造函数时,需要用半径或长宽构造基类Shape的m_x、m_y。
(2)赋值半径r时,应该把r赋值给m_x(或m_y);赋值长宽l、w时,应该把l赋值给m_x,w赋值给m_y。这样才能返回正确的赋值。如果相反,最后得出的面积将为0。
class Circle : public Shape
{
public:
static double PI;
Circle(double r); //构造函数,并用r构造基类的m_x和m_y。
double GetArea(); //求圆的面积。
double GetRadius(); //获取圆的半径。
};
double Circle::PI = 3.14;
Circle::Circle(double r) : Shape(m_x,m_y)
{
m_x = m_y = r;
}
double Circle::GetArea()
{
return m_x*m_y*PI;
}
double Circle::GetRadius()
{
return m_x;
}
class Rectangle : public Shape
{
public:
Rectangle(double l,double w); //构造函数,并用l和w构造基类的m_x和m_y。
double GetArea(); //求矩形的面积。
double GetLength(); //获取矩形的长。
double GetWidth(); //获取矩形的宽。
};
Rectangle::Rectangle(double l,double w) : Shape(m_x, m_y)
{
m_x = l;
m_y = w;
}
double Rectangle::GetArea()
{
return m_x*m_y;
}
double Rectangle::GetLength()
{
return m_x;
}
double Rectangle::GetWidth()
{
return m_y;
}
3、最后,完成main函数,调用成员函数
int main()
{
Circle c(1);
cout<< "圆的半径为:" << c.GetRadius() <<endl;
c.GetArea();
cout<< "圆的面积为:" << c.GetArea() <<endl;
cout<< "--------------" <<endl;
Rectangle r(3,4);
cout<< "矩形的长度为:" << r.GetLength() <<endl;
cout<< "矩形的宽度为:" << r.GetWidth() <<endl;
r.GetArea();
cout<< "矩形的面积为:" << r.GetArea() <<endl;
return 0;
}
4、运行结果如下:
圆的半径为:1
圆的面积为:3.14
--------------
矩形的长度为:3
矩形的宽度为:4
矩形的面积为:12