2016-12-23 211 views
-2

我已經創建了一個使用poly和繼承的項目。 基類是「形狀」,派生是「圓」和「多邊形」,其中「三角形」和「矩形」由「多邊形」 派生,此外我需要創建一個類點將初始化每個形狀構造函數使用Point對象。C++派生類,繼承和對象poly

創建了兩點 - 點o(0,0),點a(0,1) 和一個新的圓形'形狀'創建 - 新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; 
} 
+2

這是很多的代碼,沒有問題。 –

+0

不應該在圓形類中只包含一箇中心點和半徑點? – Valentin

+0

@Valentin - 這是給定的main.cpp,我需要按原樣使用它。 –

回答

0

這個公式是錯誤的:

pt1.getY()-pt0.getY() * 3.14; 

首先出現的是僅由pt0失蹤(),否則你是乘以PI。

其次,一個圓不能被兩行中的行定義:你需要三個,計算並不那麼容易。我認爲你希望第一個點成爲中心,第二個點在這條線上。然後半徑很容易:

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

謝謝!,它似乎幫助我。 –