Professional Documents
Culture Documents
Waradzyn Dizedziczenie
Waradzyn Dizedziczenie
Ćwiczenie C5
Dziedziczenie i funkcje wirtualne
Elementy grafiki 2D
Zaliczanie ćwiczenia
lista pochodzenia
public:
void pokaz_sie() { // ciało metody pokaz_się() (wersja B)}
int nowa() { // ciało metody nowa()}
} ;
specyfikator dostępu
private private
protected protected
public public
Sposób dziedziczenia składników klasy podstawowej
gdy specyfikatorem dostępu jest protected, np.
class pejzaz: protected obraz { ...};
private private
protected protected
public public
Sposób dziedziczenia składników klasy podstawowej
gdy specyfikatorem dostępu jest private, np.
class pejzaz: private obraz { ...};
private private
protected protected
public public
Dziedziczenie kilkupokoleniowe
Dziedziczenie może być kilkupokoleniowe, tzn.
klasa pochodna może być równocześnie klasą
podstawową dla innej klasy pochodnej.
Klasa podstawowa A (dziadek)
pejzaż portret
martwa_natura
pejzaż_morski pejzaż_górski
Tworzenie obiektów
main() {
obraz jakis_obraz;
// obiekt klasy obraz
pejzaz jakis_pejzaz;
// obiekt klasy pejzaz
// .....
}
1. Zwykłe wywołania funkcji
składowych (metod)
main() {
obraz jakis_obraz; // definicje obiektów
pejzaz jakis_pejzaz;
Pytanie:
Czy nasz wskaźnik, zdefiniowany do pokazywania na obiekty klasy
obraz (klasa podstawowa) może też pokazywać na obiekty klasy
pejzaz (klasa pochodna)?
Odpowiedź: TAK.
Wywołania metod z użyciem wskaźnika (3)
Pytanie:
Jaki będzie efekt wykonania instrukcji:
wsk -> rama();
wsk -> pokaz_sie();
w poniższym programie?
main() {
pejzaz jakis_pejzaz;
obraz *wsk;
wsk = & jakis_pejzaz;
wsk -> rama();
wsk -> pokaz_sie();
}
Funkcje wirtualne
Program z poprzedniego slajdu z fragmentem definicji metody pokaz_sie()
class obraz { // klasa podstawowa
public:
void (virtual) pokaz_sie() { // ciało metody pokaz_się() (wersja A)}
} ;
main() {
pejzaz jakis_pejzaz;
obraz *wsk;
wsk = & jakis_pejzaz;
wsk -> rama();
wsk -> pokaz_sie();
}
Efekt wykonania instrukcji wsk -> pokaz_sie():
• funkcja z klasy podstawowej, jeśli w definicji funkcji brak słowa virtual
(zwykła funkcja),
• funkcja z klasy pochodnej, jeśli jest słowo virtual (funkcja wirtualna).
3. Funkcja globalna z argumentem
będącym referencją obiektu klasy
podstawowej (1)
// definicja funkcji globalnej
// argument to referencja obiektu klasy podstawowej
void malarz(obraz & namalowalem) {
Fragmenty programu:
moveto(100, 100);
outtext("Witaj w demonstracyjnym programie graficznym");