From 8cf1283a4ffb9fe1901c29c087fa376de82726af Mon Sep 17 00:00:00 2001 From: angeld55 Date: Sat, 19 Feb 2022 23:30:52 +0200 Subject: clean up --- Sem. 12/README.md | 190 ------------------------------------------------------ 1 file changed, 190 deletions(-) delete mode 100644 Sem. 12/README.md (limited to 'Sem. 12/README.md') diff --git a/Sem. 12/README.md b/Sem. 12/README.md deleted file mode 100644 index 5c13eba..0000000 --- a/Sem. 12/README.md +++ /dev/null @@ -1,190 +0,0 @@ - -# Наследяване -## Пример за наследяване - -При създаване на нов клас, който има общи компоненти и поведение с вече дефиниран клас, вместо да дефинира повторно тези компоненти и поведение, можем да го обявим за наследник на вече дефинирания. - -```c++ -class A -{ - . - . - . -public: - void f() - { - . - . - . - } - . - . - . -}; -class B : public A -{ - . - . - . -} - -int main() -{ - B obj; - obj.f(); // OK! -} - ``` - При наследяването: - - Наследяват се член-данните и методите на основните класове - - Получава се достъп до **някои** от наследените компоненти на основните класове - - -В нашия пример класът **В е наследник на класа А.** Обекти от класовете изглеждат така: - -![enter image description here](https://i.ibb.co/Fshm2LJ/Untitled-Diagram.png) - - -След като В е наследник на класа А, то при създаване на обект от тип В се създава обект от тип А, **който е част от обекта** от тип В. - - -## Видове наследяване -Някои типове наследяване в c++: - - - private (по подразбиране) - - protected - - public - -Примери: -```c++ -class A -{ - public: - int x; - protected: - int y; - private: - int z; -}; - -class B : public A -{ - // x is public - // y is protected - // z is not accessible from B -}; - -class C : protected A -{ - // x is protected - // y is protected - // z is not accessible from C -}; - -class D : private A // 'private' is default for classes -{ - // x is private - // y is private - // z is not accessible from D -}; - ``` - -## Подаване като параметри на функции. -Класове-наследници могат да бъдат подавани като параметри на функции, които приемат обекти от базовия клас. Може да се използва функционалността само от базовия клас. - -```c++ -class A -{ - int a; -} -class B : public A -{ -public: - int b; -} -void f(A& obj) -{ - obj.a++; -} - -int main() -{ - A obj1; - B obj2; - - f(obj1); //OK! - f(obj2); //OK! -} - ``` - -## Конструктури и деструктори при наследяване. -Във всеки контструктор на класът-наследник, трябва да се оказва кой конструктор да се извика за базовия клас. Ако не оказано, ще се извика конструктора по подразбиране. - -```c++ -class B : public A -{ -. -. -. -public: - B(...) : A(...) //some constructor of A. - { - . - . - . - } -} - ``` -Деструкторът на наследния клас извиква деструктора на базовия клас. - - -## Копиране при наследяване -При разписване на конструктора за копиране и оператора за присовяване на клас-наследник, трябва експлицитно да извикваме копиране и за базовия клас. - ```c++ -B::B(const B& other) : A(other) // (copy constructor of A (base class) -{ - copyFrom(other); -} - -B& B::operator=(const B& other) -{ - - if (this != &other) - { - A::operator=(other); //operator= of A (base class) - free(); - copyFrom(other); - } - return *this; -} - ``` - - - - -## Задачи - -**Задача 1:** -Реализирайте класове бар, от който ще могат да се взимат напитки (нормални и алкохолни) в определен ред. Редът ще бъде по зареждането им в бара. -**Напитката** има *име и количество (в мл)*, а **алкохолната напитка** има *име, количество и процент алкохол.* - -Примерен интерфейс: - ```c++ - -int main() -{ - Bar b; - - b.addDrink("Coke", 330); - - b.addDrink("Fanta", 500); - - b.addAlocoholDrink("Zagorka", 500, 5); - - b.getAcloholDrink(); // Zagorka - - b.getDrink() // Coke - b.getDrink() // Fanta -} - ``` - - -- cgit v1.3.1-23-gd82d