# Виртуални таблици. Ключови думи override и final. Колекции от обекти в полиморфна йерархия. Копиране и триене. ## Виртуални таблици. Виртуални таблици - таблица с указатели към функции. ```c++ struct A { virtual int f() { return 1; } virtual int g() { return 1; } }; struct B : public A { int f() override { return 2; } }; struct C : public B { int f() override { return 3; } int g() override { return 3; } }; ``` ![enter image description here](https://i.ibb.co/dbzJTtm/vtable-2-1.png) ## override и final - override указва, че дадена функция презаписва функция от базовия клас. Ако в базовия клас няма такава функция, то кодът няма да се компилира. - final указва, че дадена функция не може да се презависва надолу по йерархията или че даден клас не може да се наследява. ## Колекция. Можем да реализираме колекция от различни типове (но с общ базов клас), чрез масив от указатели. Указателите трябва да са от типа на базовия клас. ```c++ struct Fruit { virtual void printColor() const = 0; virtual ~Fruit(){} }; struct Apple : public Fruit { void printColor() const override { std::cout << "Red or green! "<clone(); count = other.count; capacity = other.capacity; } ```