首页 文章

c派生类,继承和对象poly

提问于
浏览
-2

我创建了一个使用多边形和继承的项目 . 基类是“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 回答

  • 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;
    

相关问题