# Наследования ```cpp class A { int a; public: A(int x = 0) : a(x) {} void f() { cout << a; } }; class B : public/private/protected A/*, C*/ { // private by default int b; public: B(int x = 0, int y = 0) : A(x), b(y) {} void f() { cout << a << b; // error. A is private } }; ``` ```cpp int main() { A obj_a, *pa; B obj_b, *pb; pa = &obj_a; pb = &obj_b; // при открытом наследовании pa = pb; pb = (B*)pa; // при закрытом наследовании pa = (A*)pb; // pb = (B*)pa; - невозможно *pa = &obj_a; pa->f(); // вызов из a *pa = &obj_b; pa->f(); // вызов тоже из a, т.к. не виртуальная функция } ``` в ситуации любого наложения функций, происходит перекрытие имён ```cpp class A { void f(); } class B : A { void f(int) { f(); } // error } ``` конструкторы не наследуются ## консруктор копирования ```cpp B (const B &a) : A(a) {} ```