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 ;
}
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
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
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