Задачки с решения ;)

“Примерна” задача №1.
Да имам и уникалното именуване на Павлов или на Бъчваров, даже не знам чие произведение са контролните.

#include <iostream>
using namespace std;

class A
{
public:
	A(int nValue)
	{
		cout << "A: " << nValue << endl;
	}
};

class B : public A
{
public:
	B(int nValue, double dValue) : A(nValue)
	{
		cout << "B: " << dValue << endl;
	}
};

class C : public B
{
public:
	C(int nValue, double dValue, char chValue)
		: B(nValue, dValue)
	{
		cout << "C: " << chValue << endl;
	}
};

int main()
{
	C cClass(5, 4.3, 'R');

	return 0;
}

Output-а на програмата:

A: 5
B: 4.3
C: R

Обяснението за последователността на изпълнението на програмата е следното:

Започваме със създаването на обект от клас-наследника С, но при извикване на подходящия (единствения) конструктор на този клас се извиква конструктора на своя родител (class B), а B от своя страна извиква конструктора на неговия родител (class A). В А е дъното на наследяването и за това първо се изпълнява неговия конструктор, и т.н. в обратен ред се изпълняват конструкторите на В и С. Всеки клас-наследник разширява своя родител, заради което при създаването първо се изпълнява конструктора на клас-родителя. При унищожаването е на обратно, първо се премахва разширената част на класа на наследника и след това общата от класа на родителя.

Конструкторите винаги се изпълняват от родителя -> наследника,

докато при деструкторите е обратното от наследника -> родителя.

« 1 2 3 4 5 6 7 8 »

Leave a comment