你好,我在分配作业时遇到问题,我需要初始化基本构造函数,该构造函数在多边形的派生构造函数中指向多次。
该多边形至少具有3个点,每个点都有一个坐标值。有谁有想法如何在构造函数init中多次初始化基本构造函数? 继承的想法不是我的想法,是分配问题。
这是问题
多边形(构造函数)创建一个具有n个顶点的多边形,这些顶点从数组点中存储的值中获取其值。注意,数组点不应该被认为是持久的。调用构造函数后,可以将其删除。
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
这个分配结构就像 enter image description here
我取消了其他对象类的实现
答案 0 :(得分:0)
您的作业文本未提及继承。它实质上描述了组成。从这里走:
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.
};
答案 1 :(得分:0)
这是一个棘手的问题,实际上是要我找到多边形的质心点。
所以我需要一个私有的多边形函数计算中心点,并返回多边形中心点的结果,然后在初始化时在点构造器中调用该函数。