定义一个点类,它包含两个成员变量:纵坐标和横坐标。通过继承一个点类设计一个圆类,新增属性有半径?

定义一个点类,它包含两个成员变量:纵坐标和横坐标。通过继承一个点类设计一个圆类,新增属性有半径,方法有设置半径、返回半径、计算圆的周长和计算圆的面积。设计一个测试类,计算... 定义一个点类,它包含两个成员变量:纵坐标和横坐标。通过继承一个点类设计一个圆类,新增属性有半径,方法有设置半径、返回半径、计算圆的周长和计算圆的面积。设计一个测试类,计算圆的周长和面积。 展开
 我来答
汤巧丽782
推荐于2018-05-14
知道答主
回答量:25
采纳率:0%
帮助的人:14.6万
展开全部
#include <iostream>
using namespace std;

const double pi = 3.14;
//Point类,派生出Rectangle类和Circle类,计算各派生类对象的面积Area()。
template <class T>
class Point
{
public:
Point(){}
Point(const T x, const T y);
Point& operator= (const Point<T>&p);

public:
T x;
T y;
};

template <class T>
Point<T>::Point(const T x, const T y)
{
this->x = x;
this->y = y;
}
template <class T>
Point<T>& Point<T>::operator= (const Point<T>&p)
{
this->x = p.x;
this->y = p.y;
return *this;
}

template <class T>
class Shape
{
public:
virtual double Area() = 0;
};
template <class T>
class Rectangle:public Shape<T>
{
public:
Rectangle(const Point<T>& p1, const Point<T>& p2);
double Area();
private:
Point<T> pLT;
Point<T> pRD;
};

template <class T>
Rectangle<T>::Rectangle(const Point<T>& p1, const Point<T>& p2)
{
pLT = p1;
pRD = p2;
}
template <class T>
double Rectangle<T>::Area()
{
T w = pLT.x - pRD.x;
T h = pLT.y - pRD.y;
if(w<0) w = -w;
if(h<0) h = -h;
return double(w * h);
}
//Circle
template <class T>
class Circle:public Shape<T>
{
public:
Circle(const Point<T>& p1, const T& r);
double Area();
private:
Point<T> origin;
T r;
};

template <class T>
Circle<T>::Circle(const Point<T>& p1, const T& r)
{
origin = p1;
this->r = r;
}
template <class T>
double Circle<T>::Area()
{
return pi * r * r;
}
int main()
{
Point<int> p1(9, 0);
Point<int> p2(1, 2);
Rectangle<int> R(p1, p2);
Circle<int> C(p1, 10);
printf("Rectangle ' Area is %f\n", R.Area());
printf("Circle ' Area is %f\n", C.Area());
return 0;
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式