This repository has been archived on 2026-07-28. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
cmc/seminars/5.md
T
2025-04-13 21:48:15 +03:00

1.1 KiB

Наследования

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
    } 
};
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, т.к. не виртуальная функция
}

в ситуации любого наложения функций, происходит перекрытие имён

class A {
    void f();
}

class B : A {
    void f(int) { f(); } // error
}

конструкторы не наследуются

консруктор копирования

B (const B &a) : A(a) {}