Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Краткие теоретические сведения. Иногда возникают ситуации, когда необходимо проинициализировать по умолчанию значение некоторых свойств объекта либо для создания объекта необходимо






 

Иногда возникают ситуации, когда необходимо проинициализировать по умолчанию значение некоторых свойств объекта либо для создания объекта необходимо динамическое выделение памяти под данные и ее освобождение перед завершением работы программы. В этом случае нам необходимо использовать специальные методы – конструктор и деструктор. Конструктор срабатывает при выполнении операции определения типа переменной. Вызывается функция-конструктор в тот момент, когда создается объект, т.е. для объекта выделяется место в памяти. Нельзя вызвать функцию - конструктор в явном виде. Деструктор освобождает память выделенную конструктором при удалении объекта, закрывает открытые файлы, восстанавливает значение экрана. Области памяти, занятые данными базовых типов выделяются и освобождаются системой автоматически. Поэтому в описанном выше примере конструкторы и деструкторы не объявлялись.

Конструктор и деструктор являются членами класса. Имя конструктора совпадает с именем класса. Имя деструктора начинается с символа ~, за которым следует имя класса.

Функция – конструктор не может иметь тип возвращаемого значения. Конструктор, как и другие функции, может иметь параметры. Класс может иметь несколько конструкторов. Если в классе не объявлен ни один конструктор, компилятор сам создает функцию - конструктор класса. Деструктор, как и конструктор, не может иметь тип возвращаемого значения. Деструктор не может иметь параметров. Ни конструктор, ни деструктор не вызываются явно.

Рассмотрим пример, в котором невозможно обойтись без использования конструктора и деструктора. Необходимо создать класс динамический массив. Свойства – длина и указатель на область памяти, занятую под элементы. Методы: заполнение массива, нахождение суммы элементов массива, вывод на экран элементов массива.

В Си++ для выделения динамической памяти используется оператор new, а для освобождения – оператор delete:

int * p=new int; // выделили память для переменной целого типа

delete p; //освободили память, на которую указывает указатель p.

 

class dinamicArray{

int lenght; // размер

int*a; //указатель на массив целых чисел в динамической памяти

public: dinamicArray(int n); //конструктор

int sum(); // сумма элементов массива

void output(); //вывод массива

~dinamicArray(){delete a; }; //деструктор

};

dinamicArray:: dinamicArray(int n){//конструктор

lenght=n; //устанавливаем длину

a=new int[n]; // выделяем память

for(int i=0; i< lenght; i++)a[i]=i; //заполняем массив

}

int dinamicArray:: sum(){//сумма элементов массива

int s=0; // вспомогательная переменная для накопления суммы

for(int i=0; i< lenght; i++)s+=a[i];

return s;

}

void dinamicArray:: output(){//вывод элементов массива

cout< < endl;

for(int i=0; i< lenght; i++)cout< < a[i]< < " ";

}

void main(){

dinamicArray A(5); //создаем массив из пяти элементов

cout< < endl< < " Array A";

A. output(); //вывод элементов массива

cout< < " Sum of elements " < < A.sum(); //вывод суммы элементов

}

Обратите внимание, что при описании класса объявляются переменные, которые отражают непосредственно свойства класса. Вспомогательные переменные, например, для индекса массива, для накопления суммы объявляются непосредственно в описании методов.

Определение функции-члена класса можно включить в объявление класса. В этом случае функция становится встраиваемой. То есть она не вызывается, а ее тело встраивается в программу в место вызова, как макроопределение с параметрами в Си. В зависимости от компилятора возможны ограничения на использование встраиваемых функций: не должна содержать циклов, switch, goto, статических переменных, не должна быть рекурсивной.

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.