Здравствуйте, у меня проблема с моим назначением, которое мне нужно для инициализации базового конструктора, который многократно указывает в производном конструкторе, который является многоугольником.
У многоугольника минимум 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
это структура присваивания, такая как введите описание изображения здесь
Я убрал другую реализацию объектного класса
Это не должно быть отношения "является". Многоугольник не является - точка, многоугольник имеет - точки.
Выбирайте композицию. У многоугольника есть точки.
это назначение, которое они установили для использования наследования, а не я его выбираю.
Тогда либо задание - чушь, либо вы его неправильно поняли.
Я хотел бы увидеть это задание, это звучит так, как будто одна из двух сторон неправильно понимает, чего они на самом деле хотят. Хотя вместо этого можно использовать шаблон, это будет совершенно другой бочонок отвлекающих маневров. Хотя вы можете и наследовать точку, и объединять точки в класс (что сделало бы его нестандартным объектом макета), но в этом случае вы бы вообще не использовали родительский элемент.
Я обновляю вопрос, может ты меня просветишь, что это значит
Я не уверен, что это делает PointType *Ps = new PointType[n] ? вы пытаетесь создать экземпляр объекта PointType?
Упс, здесь мы наступили друг другу на пятки. Я переработал ваш вопрос, вы можете найти мою правку в список исправлений, если хотите объединить его с вашим.
Тот, кто вас этому учит, не понимает, что такое объектная ориентация. Если можешь, перестань их слушать





В тексте вашего задания ничего не говорится о наследовании. По сути, он описывает композицию. Перейти отсюда:
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 они никогда не допускают их к этим заданиям.
@clarenceng, хорошо, теперь я узнал пример из одной книги начала 89-го года. Наследование никак не влияет на то, как вы храните эту диаграмму, скорее всего, для стирания типа. Вам все еще нужен массив точек внутри многоугольника.
Это вопрос с подвохом, на самом деле я хочу, чтобы я нашел центральную точку многоугольника.
Поэтому мне нужна частная вычислительная центральная точка функции многоугольника и возвращение результата центральной точки многоугольника, а затем вызов функции в конструкторе точки при запуске.
Если предполагается, что многоугольник имеет несколько точек, наследование не подходит. Вместо этого используйте агрегацию (вектора <Point>).