Как создать базовый класс несколько раз в производном конструкторе

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

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

это вопрос

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

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

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

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

Если предполагается, что многоугольник имеет несколько точек, наследование не подходит. Вместо этого используйте агрегацию (вектора <Point>).

user7860670 25.09.2018 10:12

Это не должно быть отношения "является". Многоугольник не является - точка, многоугольник имеет - точки.

Yksisarvinen 25.09.2018 10:13

Выбирайте композицию. У многоугольника есть точки.

P.W 25.09.2018 10:13

это назначение, которое они установили для использования наследования, а не я его выбираю.

clarence ng 25.09.2018 10:13

Тогда либо задание - чушь, либо вы его неправильно поняли.

user7860670 25.09.2018 10:16

Я хотел бы увидеть это задание, это звучит так, как будто одна из двух сторон неправильно понимает, чего они на самом деле хотят. Хотя вместо этого можно использовать шаблон, это будет совершенно другой бочонок отвлекающих маневров. Хотя вы можете и наследовать точку, и объединять точки в класс (что сделало бы его нестандартным объектом макета), но в этом случае вы бы вообще не использовали родительский элемент.

Swift - Friday Pie 25.09.2018 10:35

Я обновляю вопрос, может ты меня просветишь, что это значит

clarence ng 25.09.2018 10:37

Я не уверен, что это делает PointType *Ps = new PointType[n] ? вы пытаетесь создать экземпляр объекта PointType?

Yucel_K 25.09.2018 10:37

Упс, здесь мы наступили друг другу на пятки. Я переработал ваш вопрос, вы можете найти мою правку в список исправлений, если хотите объединить его с вашим.

Quentin 25.09.2018 10:44

Тот, кто вас этому учит, не понимает, что такое объектная ориентация. Если можешь, перестань их слушать

Caleth 25.09.2018 11:41
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
10
138
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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.
 }; 

здесь не подходят ни необработанный указатель, ни интеллектуальный указатель, используйте std::vector

sp2danny 25.09.2018 10:50

@ sp2danny они никогда не допускают их к этим заданиям.

Swift - Friday Pie 25.09.2018 10:51

@clarenceng, хорошо, теперь я узнал пример из одной книги начала 89-го года. Наследование никак не влияет на то, как вы храните эту диаграмму, скорее всего, для стирания типа. Вам все еще нужен массив точек внутри многоугольника.

Swift - Friday Pie 25.09.2018 10:54
Ответ принят как подходящий

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

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

Другие вопросы по теме