Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Приложение 1. Классы. Пример класса с внешней реализацией функций членов (без конструктора и деструктора)

// Class_DinArr_1.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:

  // Открытые члены-функции класса

  void Init (unsigned N = 0); // Инициализация массива из N элементов

  void Clear(); // Очистка массива

  void Set (unsigned Ind, t_Inf Val); // Запись значения Val в элемент с индексом Ind

  t_Inf Get (unsigned Ind); // Возвращает значение элемента с индексом Ind

  void Add (t_Inf Val); // Добавляет в конец массива элемент со значением Val

  unsigned Count (); // Возвращает количество элементов массива

  void Free (); // Удаление массива из динамической памяти

};  

 

// ----------------------------------------------

 

void t_DinArr:: Init (unsigned N) // Инициализация массива из N элементов

{

  if (N) // Если N больше 0

        // Выделяем память в динамической области для N элементов массива

               Arr = (t_Inf *) malloc (sizeof(t_Inf) * N);

  else

        // При N = 0 указатель на массив равен 0 – массива нет

        Arr = 0;

  // Устанавливаем значение количества элементов в массиве

  ItemCount = N;

  // Очищаем массив значениями DefVal

  Clear();

}

 

// ----------------------------------------------

 

void t_DinArr:: Clear () // Очистка массива значениями DefVal

{

  for (unsigned i = 0; i < ItemCount; ++ i)

        Arr [i] = DefVal;

}

 

// ----------------------------------------------

 

// Запись значения Val в элемент с индексом Ind

void t_DinArr:: Set(unsigned Ind, t_Inf Val)

{

  if (Ind >= ItemCount) // Индекс выходит за границу массива

        cout << Err << Ind << '!\n'; // Выводим сообщение об ошибке

  else // Индекс правильный

        Arr [Ind] = Val; // Элементу массива с индексом Ind присваиваем значение Val

}

 

// ----------------------------------------------

 

// Возвращает значение элемента с индексом Ind

t_Inf t_DinArr:: Get(unsigned Ind)

{

  if (Ind >= ItemCount) // Индекс выходит за границу массива

  {

        cout << Err << Ind << "!\n"; // Выводим сообщение об ошибке

        return DefVal; // Возвращаем из функции значение DefVal

  }

  else // Индекс правильный

        return Arr [ Ind ]; // Возвращаем из функции значение элемента с индексом Ind

}

 

// ----------------------------------------------

 

// Добавляет в конец массива элемент со значением Val

void t_DinArr:: Add(t_Inf Val)

{

  ++ ItemCount; // Количество элементов в массиве увеличиваем на 1

  // Увеличиваем размер массива до нового количества элементов

  Arr = (t_Inf *) realloc (Arr, sizeof(t_Inf) * ItemCount);

  // В новый (последний) элемент массива записываем значение Val

  Arr [ ItemCount - 1 ] = Val;

}

 

// ----------------------------------------------

 

unsigned t_DinArr:: Count() // Возвращает количество элементов массива

{

  return ItemCount; 

}

 

// ----------------------------------------------

 

void t_DinArr:: Free () // Удаление массива из динамической памяти

{

  if (Arr) // Указатель на массив не равен 0 – массив есть

  {

        free(Arr); // Освобождаем динамическую память

        Arr = 0; // Делаем указатель на массив равным 0 – массива нет

        ItemCount = 0; // Присваиваем количеству элементов в массиве значение 0

  }

}

 

// ----------------------------------------------

 

/////// Конец описания класса ////////

 

int main ()

{

  setlocale (0, "");

  // Описываем экземпляр класса (статическая переменная DA типа t_DinArr):

  t_DinArr DA;

  // Вводим с клавиатуры необходимый размер массива:

  unsigned N;

  cout << "Количество элементов в массиве: ";

  cin >> N;

  // Инициализируем экземпляр класса (при этом в динамической области

  // памяти будет создан массив на заданное количество элементов

  // и этот массив будет «обнулён» значениями DefVal):

  DA.Init (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;

  // Заканчиваем работу с массивом (освобождаем динамическую память):

  DA.Free ();   

  system ("pause");

  return 0;

}

 

 

 Приложение 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 (экземпляр класса) уничтожается,

  // при этом автоматически вызывается деструктор класса, который освобождает динамическую память

}

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...