Czysto wirtualne funkcje

0

Siemka! Mam pytanko: mam klase bazowa i w niej jakas tam funkcje. Jaka bedzie roznica jesli zadeklaruje funkcje jako czysto wirutalna, a tym ze funkcja nie bedzie wirtualna a jej cialo bedzie puste? A jesli funkcja bedzie wirtualna, i jej cialo bedzie puste? Mianowicie:

class BASE
{
void funkcja();
};

a

class BASE
{
virtual void funkcja();
};

a

class BASE
{
virtual void funkcja()=0;
};

0

Jezeli w klasie sa metody czysto wirtualne to nie mozna od nich utworzyc obiektu. Poszukaj informacji na temat polimorfizmu.

0

nie jestem pewien wypowiedzi kolegi co do tego ze nie mozna utworzyc obiektu od takiej klasy. wyrazenie "virtual" oznacza dla kompilatora informacje, ze dana metoda bedzie prawodopodobnie miala wlasna implementacje w klasie dziedziczacej. Jesli jednak to nie nastapi, to funkcja virtualna bedzie i tak normalnie dostepna. jesli pozostawisz jej cialo puste - to bedzie to funkcja, ktora po prostu nic nie robi...

1

Jezeli w klasie jest metoda czysto virtualna to klasa ta jest traktowana jako abstrakcyjna nadajaca sie tylko do dziedziczenia.

0

Hmm, nie probowalem tego, ale jaki ma sens tworzenie takiej klasy?

0

Podam bardzo prosty przyklad. Mamy klase abstrakcyjna pojazd. Tworzymy od niej np pochodne samochod, lodka, samolot. Bez sensownym dzialaniem bylo by tworzenie obiektu klasy pojazd gdyz nie wiemy jaki to pojazd (samochod, czy moze lodka) dlatego te klase zaimplementowalismy jako abstrakcyjna. A dziedziczenie w tym wypadku ulatwi prace gdyz klasy pochodne moga miec wspolne cechy jak np kolor, typ silnika itp... Dzieki temu mozemy te wspolne chechy zaimplementowac w klasie bazowej w tym wypadku jest to pojazd przez co wszystkie klasy pochodne beda posiadaly te wspolne cechy.

0

No tak, ale biorac pod uwage fakt, ze zaleca sie aby nie udostepniac wlasciwosci klasy bezposrednio tylko za pomoca metod zapisu/odczytu, dojdziemy do sytuacji ze nie bedziemy musieli deklarowac jako virtualnej np. metody odczytu wlasciwosci "silnik", poniewaz w kazdej dziedziczonej klasie bedzie sluzyc do tego samego :)

0

Faktycznie zly przyklad podalem :-) ale chodzilo mi ogolnie o to ,ze metody wirtualne przydaja sie wtedy jezeli funkcja wykonuje innaczej czynnosc dla kazdej klasy pochodnej a odnosimy sie do nich np. przez wskazniki do klas podstawowych.

1 użytkowników online, w tym zalogowanych: 0, gości: 1