Skip to content

Latest commit

 

History

History
124 lines (92 loc) · 3.96 KB

04-inheritance.md

File metadata and controls

124 lines (92 loc) · 3.96 KB

Dziedziczenie


Kolejność wywołań konstruktorów i destruktorów

  • Konstruktory - najpierw klasa bazowa, potem pochodna
  • Destruktory - zawsze w odwrotnej kolejności niż konstruktory
  • Birthday cake

Co wyświetli się na ekranie?

#include <iostream>

using namespace std;

class Chocolate {
public:
    Chocolate()  { cout << "Chocolate ctor" << endl; }
    ~Chocolate() { cout << "Chocolate dtor" << endl; }
};

class ChocolateCake {
public:
    ChocolateCake()  { cout << "ChocolateCake ctor" << endl; }
    ~ChocolateCake() { cout << "ChocolateCake dtor" << endl; }
private:
    Chocolate chocolate;
};

class Candles {
public:
    Candles()  { cout << "Candles ctor" << endl; }
    ~Candles() { cout << "Candles dtor" << endl; }
};

class BirthdayCake : public ChocolateCake {
public:
    BirthdayCake()  { cout << "BirthdayCake ctor" << endl; }
    ~BirthdayCake() { cout << "BirthdayCake dtor" << endl; }
private:
    Candles candles;
};

int main(int argc, char *argv[]) {
    BirthdayCake birthdayCake;
    return 0;
}

Napisz w komentarzu 🙂


private czy public?

  • Dziedziczenie class po struct jest...?
    struct A { int a; };
    class B : A {};
    int main() {
        B item;
        item.a = 5;
    }
    • private
    • error: ‘int A::a’ is inaccessible within this context

private czy public?

  • Dziedziczenie struct po class jest...?
    class A {
    public:
        int a;
    };
    struct B : A {};
    
    int main() {
        B item;
        item.a = 5;
    }

Inheritance access modifiers

public protected private
public public protected private
protected protected protected private
private private private private

Problem diamentowy

                            A               Animal
                           / \             /      \
                          B   C         Mammal   Fish
                           \ /             \      /
                            D               Dolphin
  • Deadly Diamond of Death
  • Wirtualne dziedziczenie
    • class B : virtual public A
    • class C : virtual public A
    • class D : virtual public B, virtual public C