Написал следующее:
Код: Выделить всё
/*
* ANSI C++ standard is used
*/
#include<iostream>
using namespace std;
/*
* class vector - one dimensional array
*/
class vector {
int *data;
int max_index;
public:
vector (int size);
~vector ();
int &operator[] (int index);
};
vector::vector (int size=1)
{
data = new int[size];
max_index = size-1;
}
vector::~vector()
{
delete data;
}
int &vector::operator[] (int index)
{
if ((index < 0) || (index > max_index)) {
cerr << "Range exceeded. Exiting" << '\n';
exit (1);
}
return data[index];
}
/*
* class matrix - two dimensional aray, methods
* are using class vector
*/
class matrix {
vector *data;
int y_max_index;
public:
matrix (int x_size, int y_size);
~matrix();
vector &operator[] (int index);
};
matrix::matrix (int x_size=1, int y_size=1)
{
data = new vector[y_size]; /*<-- проблема здесь */
y_max_index = y_size-1;
}
matrix::~matrix()
{
delete data;
}
vector &matrix::operator[] (int idx)
{
if ((idx < 0) || (idx > y_max_index)) {
cerr << "Range exceeded. Exiting" << '\n';
exit(1);
}
return data[idx];
}
int main ()
{
matrix arr(5,5);
return 0;
}Трудность возникла в конструкторе класса matrix - в момент, когда создается масив объектов vector, необходимо их инициализировать, а каким образом можно передать конструктору объектов vector параметр x_size? Ведь по умолчанию они создаются единичной длины, а хотелось бы, чтобы конструктор объекта matrix мог полностью управлять размером создаваемого массива.
--
И еще вопрос, чисто теоретический - как можно перегрузить оператор индексирования (квадратные скобки), чтобы можно было индексировать многомерные массивы? То есть передавать 2 и больше индексов.