c ++派生类,继承和对象poly

时间:2016-12-23 10:37:43

标签: c++ inheritance polymorphism virtual shapes

我创建了一个使用多边形和继承的项目。 基类是" 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;
}

1 个答案:

答案 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;