Разлика между версии на „Конструктор (обектно ореинтирано програмиране)“

редакция без резюме
(Нова страница: В обектно-ориентираното програмиране '''конструкторът''' …)
 
int id;
public:
x(); //Прототип на конструктора
x();
void hey(); //Прототип на конструктора
} y;
 
x::x() //Дефиниция на конструктора
x::x()
{
id = 1;
}
 
void x::hey() //Дефиниция на конструктора
{
cout << "This is object " << id << " speaking!" << endl;
</code>
Тази програма съдържа два обекта от клас <code>x</code> - <code>y</code> и <code>z</code>. Конструктурът приема стойност 1 при първия, и стойност 2 при втория, което записва в променливата id на y стойност 1, а в променливата id на z - 2.
 
== Деструктор ==
Деструкторът на практика е точно обратното на конструктора. Това е блок от конструкции, който се изпълнява при унищожаването на един обект (това най-често се случва, когато един обект напусне областта си на видимост - например ако е локален за някоя функция, той ще напусне областта си на видимост, когато тя приключи своето изпълнение).
В [[C++]] той се дефинира по същият начин като конструктора, но бива предхождан от оператора за инвертиране - <code>~</code>.
<source lang="cpp">
#include <iostream>
using namespace std;
class x {
int id;
public:
x();
~x(); //Прототип на деструктора
} y;
 
x::x()
{
cout << "Constructing y." << endl;
}
 
x::~x()
{
cout << "Destructing y." << endl;
}
 
int main()
{
cout << "This is the main() function speaking!" << endl;
}
</source>
Това изписва:
 
<code>
Constructing y.
 
This is the main() function speaking!
 
Destructing y.
</code>
 
Често приложение на конструкторите и деструкторите е да се използват за съответно динамично заделяне и освобождаване на памет. Трябва да се внимава, тъй като може да се получат случаи, в които всеки обект от един клас да се опита да освободи едно и също пространство в паметта и респективно после да я освободи. Друг пример е при връщането на обект като резултат от функция - Създава се създава едно междинно копие на връщания обект, което не изпълнява конструктора на класа си, защото той вече е изпълнен за обекта, който се копира - т.е. копието е от настоящия момент. След връщането на този обект обаче ще се задейства деструктора не само на самия обект, който се връща, но и на междинния. Тогава двата обекта ще се опитат да освободят една и съща заделена памет.
218

редакции