Итак, я столкнулся с некоторыми проблемами в C++ (моим первым языком программирования был C).C++-матрица классов (указатель указателей)
Скажем, у меня есть следующие классы:
2 заголовки (прямоугольник и сетки, предположит, что класс точки хорошо и другое предположение, что нам не нужны функции печати в настоящее время)
Grid. ч
#ifndef GRID_H
#define GRID_H
#ifndef RECT_H
#include "Rectangle.h"
#endif
class Grid
{
public:
Grid(int tileW, int tileH, int width, int height, int color);
~Grid();
Rectangle& getRectAt(const Point &p);
void print() const;
private:
int count;
Rectangle **recs;
};
#endif
Rect.h
#ifndef RECT_H
#define RECT_H
#ifndef POINT_H
#include "Point.h"
#endif
class Rectangle
{
public:
Rectangle(int l, int u, int w, int h, int color);
int getColor() const;
void setColor(int color);
bool contains(const Point &p) const;
void print() const;
private:
const Point topLeft, bottomRight;
int color;
};
#endif
и 2 каст-х:
Rect.cpp
#include "Rectangle.h"
Rectangle::Rectangle(int l, int u, int w, int h, int color) : topLeft(l, u), bottomRight(l + w, u + h) { this->color = color; }
int Rectangle::getColor() const
{
return this->color;
}
void Rectangle::setColor(int color)
{
this->color = color;
}
bool Rectangle::contains(const Point &p) const
{
return (this->topLeft.getX < p.getX && p.getX < this->bottomRight.getX
&& this->bottomRight.getY < p.getY && p.getY < this->bottomRight.getY);
}
void Rectangle::print() const
{
/**/
}
Grid.cpp
#include "Grid.h"
Grid::Grid(int tileW, int tileH, int width, int height, int color)
{
int index, index_c=0;
recs = new Rectangle *[width];
for (int index = 0; index < width; index++)
{
recs[index] = new Rectangle [height];
}
}
(предположим, что нам не нужны другие функции и сетки конструктор не закончен).
Теперь, что я пытаюсь сделать, это в конструкторе Grid.cpp, я пытаюсь сделать динамически выделять массив массивов, но я просто не могу понять логику распределения памяти классов в cpp. Я был бы признателен, если бы кто-нибудь мог объяснить мне, как «новые» функции в cpp на классах и на n-мерных массивах (классов и вообще).
Надеюсь, вы поняли проблему, с которой я сталкиваюсь здесь.
Заранее спасибо.
Не используйте необработанные указатели и 'new' /' delete' в C++. Вместо этого используйте контейнеры и интеллектуальные указатели. –
Относительно: «Предполагается, что нам не нужны функции печати в настоящее время» Вместо того, чтобы делать предположения, удалите код и докажите, что это правда. Мало того, что вы будете удовлетворены тем, что будете правы, у вас будет меньшая площадь для поиска ошибок, и на один шаг ближе к [mcve], требуемому для этого вопроса, по теме. – user4581301
Не совсем дубликат, но лучшее направление: [Инициализация двумерного std :: vector] (http://stackoverflow.com/questions/17663186/initializing-a-two-dimensional-stdvector) – user4581301