我创建了一个使用多边形和继承的项目 . 基类是“Shape”,派生的是“Circle”和“Polygon”,“Triangle”和“Rectangle”是由“Polygon”派生的,另外我需要创建一个Point,它将使用Point初始化每个形状构造函数对象 .
创建了两个点 - 点o(0,0),点a(0,1)和一个新的圆''形状'被创建-new Circle(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;
}
1 回答
这个公式错了:
首先是缺少
()
,否则您只将PI乘以pt0
.其次,一个圆不能由行中的两个点定义:你需要三个,并且计算并不那么容易 . 我认为你想要第一点作为中心,第二点是在线 . 半径很简单: