Конструктор (обектно ориентирано програмиране): Разлика между версии
Изтрито е съдържание Добавено е съдържание
Редакция без резюме |
правопис, препратки |
||
Ред 1:
В [[Обектно-ориентирано програмиране|обектно-ориентираното програмиране]] '''конструкторът''' е блок от инструкции, който се изпълнява за [[инициализация]] на един [[обект]] при неговото създаване. Практически конструкторът може да извършва всякакъв вид действия, но ако не друго, то е поне признак за много лош стил на програмиране да се изполва за действия, които не засягат пряко създавания обект, тъй като това може да доведе до неочаквани грешки, особено в големи програми. В [[език за програмиране|езика за програмиране]] [[C++]] конструкторът се представя като [[Функция на C++|член-функция]] на един обект, носеща същото име като него.
Тя и == Елементарна дефиниция на обект с конструктор ==
<source lang="cpp">
#include <iostream>
Line 32 ⟶ 34:
</code>
При инициализацията на обект <code>y</code> на <code>id</code> се задава стойност <code>1</code>. При извикването на функцията <code>y.hey()</code> на екрана се изписва съдържанието на id оградено от низовете "This is object " и " speaking!".▼
▲При инициализацията на обект <code>y</code> на <code>id</code> се задава стойност <code>1</code>. При извикването на функцията <code>y.hey()</code> на екрана се изписва съдържанието на <code>id</code> оградено от
==Конструктори с аргументи==▼
▲== Конструктори с аргументи ==
Функцията-конструктор може да приеме аргументи, като така всеки обект може да бъде инициализиран с индивидуални стойности:
<source lang="cpp">
#include <iostream>
Line 69 ⟶ 73:
</code>
Тази програма съдържа два обекта от клас <code>x</code> - <code>y</code> и <code>z</code>.
== Деструктор ==
Деструкторът на практика е точно обратното на конструктора. Това е блок от конструкции, който се изпълнява при унищожаването на един обект (това най-често се случва, когато един обект напусне областта си на видимост - например ако е локален за някоя функция, той ще напусне областта си на видимост, когато тя приключи своето изпълнение).
В [[C++]] той се дефинира по
<source lang="cpp">
#include <iostream>
Line 109 ⟶ 116:
</code>
== Потенциални грешки при използването на конструктори и деструктори ==▼
Често приложение на конструкторите и деструкторите е да се използват за съответно [[динамично заделяне на памет|динамично заделяне и освобождаване на памет]]. Трябва да се внимава, тъй като може да се получат случаи, в които всеки обект от един клас да се опита да освободи едно и също пространство в [[компютърна памет|паметта]] и респективно после да я освободи. Друг пример е при връщането на обект като резултат от функция:
▲==Потенциални грешки при използването на конструктори и деструктори==
▲Често приложение на конструкторите и деструкторите е да се използват за съответно динамично заделяне и освобождаване на памет. Трябва да се внимава, тъй като може да се получат случаи, в които всеки обект от един клас да се опита да освободи едно и също пространство в паметта и респективно после да я освободи. Друг пример е при връщането на обект като резултат от функция - Създава се създава едно междинно копие на връщания обект, което не изпълнява конструктора на класа си, защото той вече е изпълнен за обекта, който се копира - т.е. копието е от настоящия момент. След връщането на този обект обаче ще се задейства деструктора не само на самия обект, който се връща, но и на междинния. Тогава двата обекта ще се опитат да освободят една и съща заделена памет.
== Inline декларации ==
Почти винаги конструкторите и деструкторите са малки на размер и почти винаги се дефинират inline. (Това е декларация, при която инструкциите на функцията директно се заместват на всяко място, на което се използва, наподобявайки [[предпроцесорна директива]]). Когато вместо прототип директно
Например
<source lang="cpp">
#include <iostream>
Line 139 ⟶ 148:
== Синтаксис в други езици за програмиране ==
=== PHP ===
Във версиите по-стари от [[PHP]] 5 името на конструктора съвпада с името на класа както в [[C++]]. От версия 5 се използва името <code>__constructor</code>.
<source lang="php">
class Person
|