Приложение 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; просмотров: 187;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.008 сек.