Приложение 2. Классы. Встроенные функции, конструктор и деструктор
// Class_DinArr_2.cpp: пример класса t_DinArr со встроенными функциями с конструктором и деструктором
//
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
typedef double t_Inf; // Тип данных элементов массива
const t_Inf DefVal = 0; // Значение элемента массива по умолчанию
char Err [] = "\n***В массиве нет элемента с индексом "; // Сообщение об ошибке
/////// Начало описания класса ////////
class t_DinArr {
// Закрытые члены-данные класса
t_Inf *Arr; // Указатель на динамический массив
unsigned ItemCount; // Количество элементов в массиве
public:
t_DinArr (unsigned N = 0) { Init(N); } // Конструктор класса
~ t_DinArr () { Free( ); } // Деструктор класса
// Открытые члены-функции класса
// ----------------------------------------------
void Init (unsigned N = 0) // Инициализация массива из N элементов
{
if (N)
Arr = (t_Inf *) malloc ( sizeof(t_Inf) * N );
else
Arr = 0;
ItemCount = N;
Clear();
}
// ----------------------------------------------
void Clear(); // Очистка массива
// ----------------------------------------------
void Set (unsigned Ind, t_Inf Val) // Запись значения Val в элемент с индексом Ind
{
if (Ind >= ItemCount)
cout << Err << Ind << '!\n';
else
Arr [Ind] = Val;
}
// ----------------------------------------------
t_Inf Get (unsigned Ind) // Возвращает значение элемента с индексом Ind
{
if ( Ind >= ItemCount )
{
cout << Err << Ind << "!\n";
return DefVal;
}
else
return Arr [ Ind ];
}
// ----------------------------------------------
void Add ( t_Inf Val ) // Добавляет в конец массива элемент со значением Val
{
++ ItemCount;
Arr = ( t_Inf * ) realloc ( Arr, sizeof(t_Inf) * ItemCount );
Arr [ ItemCount - 1 ] = Val;
}
// ----------------------------------------------
unsigned Count () { return ItemCount; } // Возвращает количество элементов массива
// ----------------------------------------------
void Free () // Удаление массива из динамической памяти
{
if (Arr)
{
free(Arr);
Arr = 0;
ItemCount = 0;
}
}
} ;
void t_DinArr :: Clear () // Очистка массива значениями DefVal
{
for (unsigned i = 0; i < ItemCount; ++ i)
Arr [i] = DefVal;
}
/////// Конец описания класса ////////
int main ( )
{
setlocale ( 0, "" );
// Вводим с клавиатуры необходимый размер массива:
unsigned N;
cout << "Количество элементов в массиве: ";
cin >> N;
// Создаем экземпляр класса (статическая переменная DA типа t_DinArr) с помощью конструктора:
t_DinArr DA(N);
// Существуют и другие способы использования конструктора, например:
// 1) t_DinArr DA = N;
// 2) t_DinArr DA = t_DinArr(N);
// В цикле заполняем созданный массив некоторыми значениями, например,
// равными индексам элементов массива:
for ( unsigned i = 0; i < DA.Count ( ); ++ i )
DA.Set ( i, i );
// Для контроля выводим на экран значения элементов массива:
for ( unsigned i = 0; i < DA.Count ( ); ++ i )
cout << DA.Get ( i ) << ' '; // на экране видим числа: 0 1 2 … N-1
cout << endl;
// В цикле добавляем в конец массива еще 5 элементов, информационные части
// которых заполняются значениями, от N до N + 4
for ( unsigned i = 0; i < 5; ++ i )
DA.Add ( N + i );
// Снова для контроля выводим на экран значения элементов массива:
for ( unsigned i = 0; i < DA.Count ( ); ++ i )
cout << DA.Get ( i ) << ' '; // на экране видим числа: 0 1 2 … N + 4
cout << endl;
system ( "pause" );
return 0;
// При завершении программы локальная переменная DA (экземпляр класса) уничтожается,
// при этом автоматически вызывается деструктор класса, который освобождает динамическую память
}
Дата добавления: 2019-02-07; просмотров: 223;