Вариант 3. Шаблонный массив переменной длины ("умный")

Стоимость

25 баллов

Описание

Создать шаблонный класс, реализующий массив переменной длины. Шаблон должен параметризоваться типом элемента массива. Класс должен мочь определить хранит он элементы по значению, или указатели на объекты. В случае, если он хранит указатели, то при удалении элемента из массива (или при очистке массива) он должен применять к этим указателям операцию delete.

[Внимание]Внимание

Вариант с определением частичной конкретизации всего массива для типов, являющихся указателями, приниматься не будет. Нужно более изящное (и сложное) решение.

Защита

Для защиты лабораторной работы необходимо представить:

  • Работающую программу.
  • Диаграмму классов.
  • Набор юнит-тестов, выполненных с помощью CppUnitLite.

Пример

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

/*...*/

typedef VarArray<int *> Array1;
typedef VarArray<int> Array2;

int main() {
	Array1 a1;
	Array2 a2;

	int *ip = new int;
	*ip = 3;

	a1.add(ip);

	a2.add(3);

	for (int i = 0; i < a1.length(); i++) {
	        if (a1[i]) cout << i << ": " << *(a1[i]) << endl;
	}

	a1.clear();   // влечет за собой delete a1[0] где-то
	              // в недрах VarArray<>

	a2.clear();   // а здесь никаких попыток вызвать delete не происходит

	return 0;
}
Сайт управляется системой uCoz