2016-12-23 2 views
-2

Я создал проект, который использует poly и inheritance. базовым классом является «Shape», а производными являются «Circle» и «Polygon», которые «Треугольник» и «Прямоугольник» получены из «Polygon» . Кроме того, мне нужно создать класс Point, который инициализирует каждый конструктор формы используя объект Point.C++ производный класс, наследование и объекты poly

Две точки были созданы - точка О (0,0), точка А (0,1) и новый круг «форма» была создана -Новый круг (о, а) им пытаются вычислить площадь этого путь: 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; 
} 
+2

Очень много кода и вопросов нет. –

+0

Не должен ли класс окружения содержать только одну точку центра и радиуса? – Valentin

+0

@ Valentin - это заданный main.cpp, мне нужно использовать его как есть. –

ответ

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; 
+0

спасибо, мне кажется, это помогает. –

Смежные вопросы