c++:利用继承与派生实现形状类求面积功能

题目:

建立一个形状类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

猜你喜欢

转载自blog.csdn.net/xutong98/article/details/81268083
今日推荐