Как построить базовый класс несколько раз в производном конструкторе - PullRequest
0 голосов
/ 25 сентября 2018

Здравствуйте, у меня проблема с моим назначением, которое мне нужно, чтобы инициализировать базовый конструктор, который является многократным указателем в производном конструкторе, который является полигоном.

Полигон имеет как минимум 3 точки, каждая точка имеет значение координаты.У кого-нибудь есть идеи, как инициализировать базовый конструктор несколько раз в конструкторе init?Идеи наследования - это не мои идеи, это вопрос присваивания.

это вопрос

Полигон  (конструктор) создает многоугольник с вершинами npoints, вершины берут свои значения из тех, которые хранятся вмассив точек.Обратите внимание, что точки массива не должны сохраняться;он может быть удален после вызова конструктора.

struct PointType
{
  float x;
  float y;
};

class Point 
{ 
public:  
  Point(const PointType& center );
  virtual ~Point();  
 private:
  PointType m_center;
};

class Polygon : public Point
{ 
public:  
  Polygon(const PointType* points, int npoints);  
  ~Polygon();  
  const VectorType& operator[](int index) const;  
  private:
  int m_npoints;
  Object::PointType * m_pt;
    }; 


#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cmath>
#include "Object.hpp"
using namespace std;


const float eps = 1e-5f;

bool Near(float x, float y)
{
  return abs(x-y) < eps;
}


float frand()
{
  return 10.0f*float(rand())/float(RAND_MAX);
}


int main()
{
  srand(unsigned(time(0)));
  int count = 0,
      max_count = 0;

  // Polygon tests
  int n = 3 + rand()%8;
  float *xs = new float[n],
        *ys = new float[n];
  float x = 0, y = 0;
  PointType *Ps = new PointType[n];
  for (int i=0; i < n; ++i) {
    xs[i] = frand(), ys[i] = frand();
    Ps[i] = PointType(xs[i],ys[i]);
    x += xs[i], y += ys[i];
  }
}
Point::Point(const PointType& center)
: m_center{center}
{

}

 // this is wrong, can correct me how to construct it?
 Polygon::Polygon(const PointType* points, int npoints, float depth)
   :m_npoints{npoints} , m_pt{new Object::PointType[npoints]}, Point    (*m_pt ,depth)
{
  for(int i=0; i < m_npoints ; ++i)
  {
    m_pt[i] = points[i];
  }
}

    enter code here

это структура присваивания, такая как введите описание изображения здесь

Я забрал реализацию класса другого объекта

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Это вопрос с подвохом, на самом деле нужно, чтобы я нашел точку центроида многоугольника.

Итак, мне нужна частная вычислительная центральная точка функции многоугольника и возвращаем результат центральной точки многоугольника, а затем вызываюфункция в конструкторе точек при init.

0 голосов
/ 25 сентября 2018

Ваш текст назначения ничего не говорит о наследовании.Это по сути описывает композицию.Иди отсюда:

class Polygon
{ 
public:  
  // constructor should allocate the array
  Polygon(const PointType* points, int npoints);  
  ~Polygon();  
private:
  Point *m_npoints; // or use smart pointer if you're allowed to.
 }; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...