Witam!
Jestem w trakcie nauki C++. W trakcie nauki pojawilo mi sie kilka pytan,
moze mi podpowiecie?
1. Znalazlem informacje o funkcjach czysto wirtualnych. Ich istota jest dla
mnie zupelnie zrozumiala: wymuszaja one ich nadpisanie w klasie potomnej i
jednoczesnie uniemozliwiaja tworzenie klasy bazowej. Tym bardziej dla mnie
jest niezrozumiale, dlaczego autor ksiazki z ktorej sie ucze (Jesse Liberty,
C++ w 24 godziny) pokazuje, ze mozna taka funkcje zaimplementowac w klasie
bazowej, po czym nie implementuje jej (nie nadpisuje) w klasie potomnej. O
ile rozumiem, taki zabieg powoduje, ze zachowuje sie ona jak zwykla funkcja
wirtualna, wiec po co ten cyrk z ustawianiem jej jako czysto wirtualna?
Chyba troche to tlumaczenie zakrecilem wiec zapytam inaczej: czy (i jakie)
sa powody implementowania funkcji czysto wirtualnych?
2. Do czego tak naprawde moze byc przydatna funkcja (operator - co to jest w
ogole) dynamic_cast? Z ksiazki zrozumialem, ze jesli zwraca ona null jesli
"castowany" za jej pomoca jest obiekt klasy roznej od typu wskaznika, albo
wskaznik na ten obiekt, jesli typ sie zgadza:
[KOD]
Kot *wsk=dynamic_cast < Kot *> (obiekt_1) //i po tym zabiegu wsk=null bo
obiekt_1 jest klasy Pies
Kot *wsk=dynamic_cast < Kot *> (obiekt_2) //i teraz wsk wskazuje na obiekt
klasy Kot, bo obiekt_2 jest klasy Kot
[/KOD]
Czy dynamic_cast sluzy tylko do sprawdzania typu obiektu?
3. Typ wyliczeniowy: dzialanie jest dla mnie jasne. Jedno pytanie tylko: po
co do niego przypisywac cyfry?
(Tj: enum kolor {CZERWONY, ZIELONY=5, NIEBIESKI, CZARNY=10, ZOLTY=20})
Przeciez i tak nie moge napisac
kolor zmienna=2;
ani tez jesli
int funkcja(kolor);
nie moge jej wywolac funkcja(3)??
4. Ostatnie pytanie:
Wskazniki tworzone sa w wolnym obszarze pamieci, na stercie. Zwykle zmienne
na stosie. Jesli pamieci braknie, to wskaznik tworzony jako new int (np.)
bedzie mial wartosc NULL (co ulatwi obsluge bledow) - jesli przepelni sie
stos, program sie wykrzaczy. Z drugiej strony wygodniejsze (i chyba
polecane) do uzycia sa referencje. Zatem czy nie lepiej jest zamiast tworzyc
normalne zmienne, robic wskazniki i potem do ich zawartosci tworzyc
referencje? Pamiec w obu przypadkach i tak bedzie zwalniana z zakonczeniem
funkcji/programu?
Dodam, że to nie ma nic wspólnego z odrabianiem zadań domowych
Najbardziej zależy mi na zrozumieniu tego enum-a, bo nie daje mi spać po nocach...
Z gory dzieki za odpowiedz, pozdrawiam!