以点(point)为基类,派生矩形类,与圆类,在派生类编写求面积周长的方法,分别求圆,矩形的周长与面积

圆由点加半径定义,矩形由左上方顶点加长宽定义... 圆由点加半径定义,矩形由左上方顶点加长宽定义 展开
 我来答
wdz521
2017-03-22 · TA获得超过233个赞
知道小有建树答主
回答量:251
采纳率:0%
帮助的人:160万
展开全部

具体的周长面积求解我就不写了,我写下派生类的层次和抽象时的思路吧

如果我来写,大体会是这样的

首先,抽象就是把这几个类的共同点和不同点比较一下,

比如:以点为基类,对于图形来说是有位置的,这个位置就用点来代替。

所以他们肯定有共同的位置,用什么表示呢,用坐标x,y

那就有

class Point

{

public:

Point(int x, int y):m_x(x),m_y(y){};

protect:

int m_x;

int m_y;

}

再看圆形,圆形的位置一般用圆心来表示,那么点的x,y正好代表这个圆心

,那圆形比点的表示多个半径,就叫m_radius吧,于是有

class Circle:public Point

{

public:

Circle(int x, int y, radius):Point(x, y)

{

m_raduis = raduis;

};

float calcArea()//圆形面积

{

return Math.PI * pow(m_raduis, 2);

}

float calcLength()//圆形周长

{

return Math.PI * 2 * m_raduis;

}

protected:

int m_raduis;

}


对于矩形来说,有位置,又有长宽,有两种定义方法

  1. 以左上角表达位置,这么表达的话运算比较简单,但是其位置和圆形的位置就有冲突了,也就是说矩形的位置就不代表矩形的图心了。

  2. 以矩形的中心店表达矩形的位置,这个运算稍微复杂一点点,但是其位置

    是图形的图心,考虑到时从Point继承过来的,那就用图心来代表位置吧

class Rectangle:public Point

{

public:

Rectangle(int width, int height, x, y): Point(x, y)

{

m_halfWidth = width / 2;

m_halfHeight = height/ 2;

}

int calcArea()

{

return 2*m_halfWidth * m_halfHeight*2;

}

int calcLength()

{

return (m_halfWidth + halfHeight)*4;

}

protected:

int m_halfWidth;

int m_halfHeight;

}


补充说几点:

  1. 不同的人抽象出来的东西的类和表达方式可能不一样,上面的方式可能是我这个笨蛋作出的一个牵强附会的答案。

  2. 聪明人可能会看出这个题目的问题,Point最好的方式不是用作基类,因为在抽象的时候你会发现,这个Point最好的方式可能是单独做为表达位置的类比较合适。

    比如有类Point如上

    那Circle类可能就直接是一个Point变量代表圆心,一个半径代表半径,即可表达一个圆形

    那Rectangle类可以以4个Point点来刻画一个矩形,但是这样做内存代价比较大,也可以使用上面的方式

  3. 可以看到Rectangle类,为了具象描述位置和长宽,在构造函数中采用了长宽而非半长半宽的方式,这样的代价就是计算周长和面积的时候多了一次乘法运算。

hoyacry
2011-07-25 · TA获得超过209个赞
知道答主
回答量:13
采纳率:0%
帮助的人:20.8万
展开全部
class CMyPoint
{
public:
CMyPoint(void);
~CMyPoint(void);

virtual double GetArea() = 0; //面积
virtual double GetCircle() = 0;//周长
protected:
int x;
int y;
};

class CMyCircle:public CMyPoint
{
public:
CMyCircle(int nRadii)
{
m_nRadii = nRadii;
}
~CMyCircle(void);

double GetArea()
{
return 3.14159*m_nRadii*m_nRadii;
}
double GetCircle()
{
return 2*3.14159*m_nRadii;
}
private:
int m_nRadii;
};

class CMyRectangle:public CMyPoint
{
public:
CMyRectangle(int nlength,int nWidth)
{
m_nLength = nlength;
m_nWidth = nWidth;
}
~CMyRectangle(void);

double GetArea()
{
return m_nWidth*m_nLength;
}
double GetCircle()
{
return 2*(m_nLength+m_nWidth);
}
private:
int m_nLength;
int m_nWidth;
};

基类中定义一个纯虚函数 派生类里面分别实现具体的算法
你可以百度一下 虚函数的用法 就明白这样做的原理了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
做有意义的的事
2011-08-01 · 超过14用户采纳过TA的回答
知道答主
回答量:37
采纳率:0%
帮助的人:33.9万
展开全部
你好,这是我帮你写的代码。有什么问题可以继续追问。
有其他问题也可以向我求助——做有意义的的事

#include<iostream>
#define pi 3.14
using namespace std;
class point
{protected:
double x;
double y;
public:
point(double m,double n) {x=m;y=n;}
void show_Coordinate()
{ cout<<"坐标为:"<<x<<" "<<y<<endl;}
};
class circle:public point
{private:
double radius;
public:
circle(double m,double n,double r):point(m,n)
{radius=r;}
void Circumference()
{cout<<"圆的周长为:"<<2*pi*radius<<endl;}
void area()
{cout<<"圆的面积为:"<<pi*radius*radius<<endl;}
};
class rectangle:public point
{private:
double longth;
double width;
public:
rectangle(double m,double n,double l,double w):point(m,n)
{longth=l; width=w;}
void Circumference()
{cout<<"矩形周长为:"<<2*(longth+width)<<endl;}
void area()
{cout<<"矩形面积为:"<<longth*width<<endl;}
};

void main()
{point p(1.0,2.0);
circle c(1.0,2.0,5);
rectangle r(1.0,2.0,3,4);
p.show_Coordinate();
c.Circumference();
c.area();
r.Circumference();
r.area();
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yunlkong
2011-08-05 · TA获得超过5711个赞
知道大有可为答主
回答量:9695
采纳率:0%
帮助的人:1.9亿
展开全部
基类中定义一个纯虚函数 派生类里面分别实现具体的算法
你可以百度一下 虚函数的用法 就明白这样做的原理了g
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友e358e99
2011-07-25
知道答主
回答量:4
采纳率:0%
帮助的人:6750
展开全部
#include<iostream>
#include<cmath>
#define PI 3.141592
using namespace std;
class Point
{
float x,y;
public:
Point(float a,float b)
{
x=a;
y=b;
}
float Getx()
{
return x;
}
float Gety()
{
return y;
}
};
class Rectangle:public Point
{
float x1,y1;
public:
Rectangle(float a,float b,float c,float d):Point(a,b)
{
x1=c;
y1=d;
}
double Circumference()
{
return abs(y1-Gety())*2+abs(x1-Getx())*2 ;
}
double Area()
{
return abs(y1-Gety())*abs(x1-Getx());
}
};
class Circle:public Point
{
float radius;
public:
Circle(float a,float b,float r):Point(a,b)
{
radius=r;
}
double Circumference()
{
return 2*PI*radius;
}
double Area()
{
return PI*radius*radius;
}
};
void main()
{
Rectangle a(1,2,3,4);
Circle b(1,1,4);
cout<<"矩形的周长为:"<<a.Circumference()<<endl;
cout<<"矩形的面积为:"<<a.Area()<<endl;
cout<<"圆的周长为:"<<b.Circumference()<<endl;
cout<<"圆的面积为:"<<b.Area()<<endl;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式