Hledejte v chronologicky řazené databázi studijních materiálů (starší / novější příspěvky).

29. Konstruktory a destruktory.

Konstruktor

Každá instance je vytvořena pomocí speciální metody - konstruktoru. Konstruktor se musí jmenovat stejně jako třída, jejíž instance bude vytvářet, nesmí mít návratovou hodnotu a měl by být veřejný. Každá třída může mít k dispozici více konstruktorů s různými parametry. Pak se jedná o přetěžování konstruktorů(netýká se otázky). Nemá-li třída žádný konstruktor (Například třída MojePrvniTrida v předcházející otázce č. 26.) vytvoří překladač takzvaný implicitní konstruktor bez parametrů. V konstruktoru by se měla provést inicializace dané instance. Nastavit všechny její atributy, vytvořit instance tříd, které obsahuje atd.

Příklad třídy i s konstruktory:

class Zlomek
{
private:
int Jmenovatel, Citatel;
public:
Zlomek(); /* Bezparametrický konstruktor */
Zlomek(int cislo);
Zlomek(int citatel, int jmenovatel);

~Zlomek(); //Bezparametrický destruktor.
/* Ostatní metody třídy zlomek: */
int dejCitatel();
int dejJmenovatel();
void nastavCitatel(int citatel);
void nastavJmenovatel(int jmenovatel);
float hodnota();
};

Zlomek::Zlomek() //1. konstruktor
{
Jmenovatel = 1;
Citatel = 0;
}

Zlomek::Zlomek(int cislo) //2.konstruktor
{
Citatel = cislo;
Jmenovatel = 1;
}

Zlomek::Zlomek(int citatel, int jmenovatel) //3. konstruktor
{
Citatel = citatel;
if (jmenovatel != 0)
Jmenovatel = jmenovatel;
else
Jmenovatel = 1;
}

int Zlomek::dejCitatel()
{ return Citatel; }

int Zlomek::dejJmenovatel()

{ return Jmenovatel; }

void Zlomek::nastavCitatel(int citatel)
{ Citatel = citatel; }

void Zlomek::nastavJmenovatel(int jmenovatel)
{
if (jmenovatel != 0)
Jmenovatel = jmenovatel;
}

float Zlomek::hodnota()
{ return ((float)Citatel)/Jmenovatel; }



Zlomek::~Zlomek()
{
cout << "Loučí se s vámi instance třídy zlomek. " << endl; << dejCitatel() << '/' << dejJmenovatel() << endl;
}

Destruktor
Destruktor, jak již asi sám jeho název napovídá, slouží k likvidaci objektů. Destruktor (stejně jako konstruktor) je metoda, která je zavolána na instanci v momentě, kdy je instance likvidována. Destruktor se jmenuje stejně jako třída, jen před názvem třídy je znak ~ . Destruktor nesmí mít návratovou hodnotu a žádné parametry. V destruktoru by se měly uvolnit všechny zdroje, se kterými instance pracovala. Například uzavřít datové soubory, uvolnit případnou alokovanou paměť a podobně. Nemá-li třída destruktor, překladač vytvoří implicitní destruktor. Ve třídě Zlomek naprosto stačí implicitní destruktor. Ale jako příklad je uveden.

Žádné komentáře:

Okomentovat