我创建了一个使用多边形和继承的项目。 基类是" Shape"而派生的是" Circle"和" Polygon"其中" Triangle"和"矩形"由" Polygon"衍生而来。 另外我需要创建一个Point类,它将使用Point对象初始化每个形状构造函数。
创建了两个点 - 点o(0,0),点a(0,1) 一个新的圆形'形状'创建了 - 新圈(o,a) 我试图以这种方式计算面积: a.getX() - a.getY()[这是半径] * 3.14
的main.cpp
#include <iostream>
#include "Point.h"
#include "Shape.h"
#include "Circle.h"
using namespace std;
void main ()
{
Point o(0,0);
Point a(0,1);
Point b(1,0);
Shape *shapes[]=
{
new Circle (o,a)
new Rectangle(a,b);
new Triangle (o,a,b);
};
cout<<" area= "<<shapes[0]->area();
//should print pt1.getY()-pt0.getY() * 3.14
}
shape.h
#ifndef SHAPE_H
#define SHAPE_H
class Shape
{
public:
virtual double area() const= 0;
};
#endif
circle.h
#ifndef CIRCLE_H
#define CIRCLE_H
#include "Shape.h"
#include "Point.h"
class Circle:public Shape
{
public :
Circle(Point pt0,Point pt1);
double area();
private :
Point pt0, pt1;
};
#endif
circle.cpp
#include "Circle.h"
#include "Point.h"
Circle::Circle(Point pt0,Point pt1)//(o,a) from the main
{
this->pt0=pt0;
this->pt1=pt1;
}
double Circle:: area()
{
return pt1.getY()-pt0.getY() * 3.14;
}
答案 0 :(得分:0)
这个公式错了:
pt1.getY()-pt0.getY() * 3.14;
首先缺少()
,否则您只将PI乘以pt0
。
其次,一个圆不能由行中的两个点定义:你需要三个,并且计算并不那么容易。我认为你想要第一点作为中心,第二点是在线。半径很简单:
double dx = pt1.getX() - pt0.getX();
double dy = pt1.getY() - pt0.getY();
double radius = sqrt(dx*dx + dy*dy);
double area = 2 * radius * PI;