Вариант 1

Задача 1. Да се попълни в празните полета изхода от съответни програмни контрукции. Да се обозначи типа на свързването с адреси на методи – (д)инамично или (с)татично.

class A
{ public:
   A()
   { cout << "A::A()\n"; g();     
   }

   void operator =(const A&)
   { cout << "A::=\n";
   }
	
   void f ()
   { cout << "A::f()\n";
     g ();
   }

   virtual void g () 
   { cout << "A::g()\n";
   }

   ~A ()
  { cout << "A::~\n";}
  };

  class B : public A
  { public:
     B()
     { cout << "B::B()\n";
     }

     void f ()
     { cout << "B::f()\n";
     }

     void g ()
     { cout << "B::g()\n";
     }
     ~B()
     { cout << "B::~\n";
     }
};

void main ()
{
	cout << "1:\n";
	B* bp = new B;

	
	cout << "2:\n";
	A* bp_a = bp;
	bp_a->f ();

	cout << "3:\n";
	bp_a->g();

	cout << "4:\n";
	A a = *bp;

	cout << "5:\n";
	B b = *bp;

	cout << "6:\n";
	delete bp_a;

	cout << "7:\n";
};

Задача 2. Да се реализират следните класове:
Клас връх, който се описва с височина и име на съдържащата го планина. Клас туристически_връх, който наследява връх и добавя името на върха. Клас военен_връх, който наследява връх и добавя номер на котата на върха. За класовете реализирайте подходящи конструктори, селектори и метод за извеждане на името на върха (за класа военен_връх, името е във формат “кота 54291”).

Задача 3. Дефинирайте клас курс с параход, който се дефинира със своята цена на километър, и дължина. Дефинирайте полет със самолет, който се определя с цена на билет, и код (кодът се състои от 2 букви, следвани от до 4 цифри). Реализирайте за тези класове подходящ абстрактен базов клас “етап от пътуване”. Напишете функция, която по даден линеен едносвързан списък от етапи от пътуване и брой пътуващи в една група, връща сумарната цена на пътуването на групата през всичките етапи.

Вариант 2

Задача 1. Да се попълни в празните полета изхода от съответни програмни контрукции. Да се обозначи типа на свързването с адреси на методи – (д)инамично или (с)татично.

class A
{ public:
   A()
   { cout << "A::A()\n"; g();      
   }

   A(const A&)
   { cout << "A::copy()\n";
   }

   void f()
   { cout << "A::f()\n";
     g ();
   }

   virtual void g ()
   { cout << "A::g()\n";
   }

   ~A ()
  { cout << "A::~\n";
  }
};

class B : public A
{ public:
   B()
   { cout << "B::B()\n";
   }

   B(const B&)
   { cout << "B::copy()\n";
   }

   void f()
   { cout << "B::f()\n";
   }

   void g ()
   { cout << "B::g()\n";
   }

   ~B()
   { cout << "B::~\n";
   }
};

void main ()
{
	cout << "1:\n";
	B* bp = new B;

	
	cout << "2:\n";
	A* bp_a = bp;
	bp_a->f ();

	cout << "3:\n";
	bp_a->g();

	cout << "4:\n";
	A a (*bp);

	cout << "5:\n";
	B b (*bp);	

	cout << "6:\n";
	delete bp_a;

	cout << "7:\n";
};

Задача 2. Реализирайте базов клас автомобил, характеризиращ се с модел (например ”Aston-Martin DB9”) и разход на гориво. Реализирайте производен клас тунингован_автомобил, допълващ базовия с име на компанията, извършила тунинга. Реализирайте и производен клас амортизиран_автомобил, имащ допълнителна информация за това с колко се е увеличил разходът на гориво.
За класовете реализирайте подходящи конструктори, селектори и метод за извеждане на информацията за модела и специфичния му разход на гориво. Ако автомобилът е тунингован, към името на модела се добавя и името на тунинговащата фирма.

Задача 3. Реализирайте клас, описващ правоъгълна тава чрез дължина, ширина и дълбочина. Реализирайте клас, описващ тиган чрез диаметър и дължина на дръжката. За тези два класа реализирайте подходящ абстрактен базов клас “домакински съд”.
Напишете функция, която по зададен линеен едносвързан списък от домакински съдове, намира дали те ще могат да поберат дадено количество течност.