- W programie mamy klasę odtwarzacz i pochodną od niej klasę odtwarzacz_mp3. Mamy też klasę utwor_muzyczny i pochodną od niej klasę piosenka_rockowa. Dziedziczenia są publiczne. W klasie odtwarzacz jest funkcja wirtualna:
utwor* wyswietl_wykonawcow()
Napisz możliwe deklaracje tej funkcji w klasie odtwarzacz_mp3 ? Czy mogą one tam wystąpić równocześnie ?
Moje pomysły:
utwor* wyswietl_wykonawcow();
piosenka* wyswietl_wykonawcow();
I teraz jeszcze jedna wątpliwość: czy mogą one tam(czyli w klasie odtwarzacz_mp3) wystąpić równocześnie ?
- Mamy klasę podstawową bilet, a w niej funkcję wirtualną która jest publiczna. W klasie pochodnej bilet_ulgowy funkcja ta zdeklarowana jest jako private. Jak zareaguje kompilator widząc, że w tekście programu, w funkcji main uruchamiamy tę funkcję drukuj na rzecz:
a) obiektu klasy bilet, pokazywanego wskaźnikiem typu bilet*
b) obiektu klasy bilet_ulgowy pokazywanego wskaźnikiem typu bilet*
c) obiektu klasy bilet pokazywanego wskaźnikiem typu bilet_ulgowy*
d) obiektu klasy bilet_ulgowy pokazywanego wskaźnikiem typu bilet_ulgowy*
Moje pomysły:
Generalnie dostęp jest taki, jaki ma ta wersja funkcji wirtualnej w klasie, z której jest wskaźnik więc:
a) ok, dostęp publiczny, uruchomiona zostaje funkcja wirtualna z klasy bilet
b) ok, dostęp publiczny, uruchomiona zostaje funkcja wirtualna z klasy bilet_ulgowy ?
c) błąd ? czy ma to w ogóle sens !?
d) błąd, dostęp prywatny
Czy gdy klasa bilet deklaruje przyjaźni z klasą bilet_ulgowy coś się zmienia w tych odpowiedziach ?