10. Наследяване

Една реализация на класа Employee:
class Employee {
public:
   Employee();
   Employee(string emp_name, double init_salary);
   void set_salary(double new_salary);
   string get_name() const;
   double get_salary() const;
   void print() const;
private:
   string name;
   double salary;
};



Динамична памет

* Заделяне на динамична памет:
new Employee
new int
* Тип указател - съхранява адрес в heap-а
-- дефиниране:
Employee * boss;
int * pn;

-- запазване на памет:
new име на тип
new име на тип(...)

-- задаване на начална стойност:
Employee * boss = new Employee("John", 3200);
int * pn = new int(10);

-- стойност на указател:
Employee harry("Harry", 1500);
*boss = harry;
cout << (*boss).get_salary();
cout << boss->get_salary();
*pn = 12;
cout << *pn;

-- освобождаване на памет (унищожаване на обекта):
delete boss;
delete pn;



Производни класове

class Manager : public Employee {
public:
   Manager(string n, double sal, string dept);
   string get_department() const;
   void print() const;
private:
   string department;
};

Manager man;
man.set_salary(1200);
cout << man.get_department();

Employee - базов клас, Manager - производен клас
- членовете на базовият клас са членове и на производния клас
- функциите на производният клас нямат достъп  до частните членова на базовия клас



Конструктор на производен клас и викане на член-функция на базов клас

  Manager::Manager(string n, double sal, string dept)
     : Employee(n, sal)
  { department = dept;  }
  void  Manager::print()
  { Employee::print();
    cout << department; }



Полиморфизъм
Виртуални функции
Връзки между класове