Массивы объектов статических и динамических 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Массивы объектов статических и динамических



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

Определение статического объекта и массива статических экземпляров класса с явным присваиванием значений:

<имя класса> <имя объекта> (параметры конструктора); <имя класса> <имя массива> [размер массива] =

{ <имя класса>(параметры конструктора для 0-го экземпляра), …, <имя класса> (параметры конструктора для последнего экземпляра) };

Определение динамического объекта и массива динамических экземпляров класса с явным присваиванием значений:

<имя класса> * <имя указателя на объект> = new <имя класса> (параметры конструктора);

<имя класса> * <имя массива указателей на объекты> [разм. массива] = { new <имя класса> (параметры конструктора для 0-го экземпляра), …, new<имя класса>(параметры конструктора для последнего экземпляра) };

Пример.

class demo{

int x;

public:

demo(){x=0;}

demo(int i){x=i;}};

int main(){

class demo a[20]; //вызов конструктора без параметров(по умолчанию) class demo b[2]={demo(10),demo(100)};//явное присваивание return 0;}

 

Деструктор

Деструктор - это функция, которая автоматически выполняется, когда экземпляр класса уничтожается.

Деструктор не уничтожает объект, а вызывается либо при выходе объекта за пределы своей области видимости, либо при уничтожении динамического объекта операцией delete и выполняет запрограммированные в его теле действия.

Назначение – выполнение всех действий, сопровождающих удаление объекта. Наиболее важное - это освобождение всех ресурсов, включенных в объект при его создании или выполнении действий над объектом. Такими ресурсами могут быть участки памяти динамически выделенными для полей объекта, файлы, открытые при создании объекта и связанные с ним, установка видеосистемы в исходное состояние, написание каких-либо фраз.

Класс может иметь несколько конструкторов, но деструктор может быть только один.

 

Формат деструктора:

~имя_класса(){операторы_тела_деструктора}

 

Имя деструктора совпадает с именем его класса, но предваряется символом “~” (тильда).

Деструктор не имеет параметров и возвращаемого значения.

Вызов деструктора выполняется не явно (автоматически), как только объект класса уничтожается. Например, при выходе за область определения или при вызове оператора delete для указателя на объект.

string *p=new string(“строка”);

delete p;

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

В тех случаях, когда требуется выполнить освобождение и других объектов памяти, например область, на которую указывает ch в объекте string, необходимо определить деструктор явно:

~string(){delete []ch;}

Так же, как и для конструктора, не может быть определен указатель на деструктор.

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

 

Указатели на компоненты-функции

Можно определить указатель на компонентные функции. Вне класса можно следующим образом определить указатель на метод класса:

тип_возвр_значения(имя_класса::*имя_указателя_на_функцию) (спецификация_параметров_функции);

 

Пример.

double(complex::*ptcom)(); // Определение указателя

ptcom = &complex:: real; // Настройка указателя на метод real complex A(5.2,2.7);

 

Теперь для объекта А можно вызвать его функцию real через указатель cout<<(A.*ptcom)();

Можно определить также тип указателя на функцию typedef double(complex::*PF)();

а затем определить и сам указатель с инициализацией

PF ptcom=&complex::real;

Контрольные вопросы

1. Объектно-ориентированный подход к программированию.

2. Понятие класса как структурированного типа. Определение класса

3. Внешнее и внутреннее определение компонентных функций. inline- функции.

4. Статусы доступа к членам класса. Спецификаторы доступа.

5. Создание объектов (экземпляров класса) статических и динамических. Инициализация. Обращение к компонентным данным и функциям.

6. Компонентные данные и компонентные функции.

7. Конструкторы и деструкторы. Назначение, формат определения, свойства.

8. Конструктор с параметрами. Список инициализации. Создание объектов (экземпляров класса) и массивов объектов статических и динамических.

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

10.  Конструктор по умолчанию.

11. Конструктор копирования. Назначение. Копирование по умолчанию.

12. Указатели на компонентные функции.

 

 



Поделиться:


Последнее изменение этой страницы: 2021-02-07; просмотров: 126; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.17.20 (0.005 с.)