Apakšklases konstruktors automātiski pats izsauks virsklases konstruktoru. Bet tas notiks tikai tad, ja virsklasei būs pieejams konstruktors bez argumentiem, vai ar argumentiem, kuriem ir visiem defaultās vērtības.
Virsklases konstrukoru izsauc šādi:
class ApakshKlase : public Virsklase
{
public:
ApakshKlase(int x) : Virsklase(4.5f)
{
// ...
}
// ...
}
Desktori paši izsaucās, tb vispirms izpildās apakšklases destruktors, un pēc tam automātiski izsaucās virklases destruktors(-i).
Kontruktoru/destruktoru redzamība itekmē to vai lietotājs varēs pats uztaisīt šīs klases objektu vai nē. Kā arī vai varēs iznīcināt. Tb, ja tu uztaisīsi klases konstruktoru privātu - tu pats nevarēsi uzkonstruēt klases objektu. Ja uztaisīsi konstruktoru protected, tad varēsi uztaisīt tikai šīs klases apakšklašu objektus (protams, ja tiem konstruktors būs publisks).
Virtuāls destruktors vajadzīgs, lai tu droši varētu izdzēst (ar delete) pointeri, kas norāda uz virsklasi. Tb šāda situācija:
class Base
{
public: virtual ~Base() {}
};
class Derived : public Base
{
};
// ...
int main()
{
Base* obj = new Derived()
// ...
delete obj;
}
novedīs pie atmiņas sačakarēšanas, ja tev destruktors nebūs virtuāls. Pie tam, tad netiks izsauks Derived klases destruktors (lai aizvērtu failus/atbrīvotu resursus un tml darbības). Jo ja tas nav virtuāls, tad C++ kompilētājs uzģenerēs kodu, kas atbrīvos atmiņu ko aizņem obj kā Base klases instance. Bet ja destruktors ir virtuāls, tad tiks korekti izsaukts Deriver destrukors.
Virtuālo konstruktoru C++ valodā nav. Tos emulē ar virtual Base* clone() const; veidīgām funkcijām.
Šo visu taču var izlasīt C++ standartā :)
Kā arī, ļoti ieteicami izlasāmajā, C++ FAQ Lite:
ConstructorsWhen should my destructor be virtual?What is a "virtual constructor"?