• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

nie umiem zrozumieć dziedziczenia i polimorfizmu

Object Storage Arubacloud
0 głosów
385 wizyt
pytanie zadane 23 czerwca 2016 w C i C++ przez niezalogowany
Witam, wiem że dziedziczenie ułatwia sprawę itp, ale kiedy przy funkcji stawiamy virtual a kiedy nie. Mógłby mi ktoś to wytłumaczyć??

2 odpowiedzi

0 głosów
odpowiedź 23 czerwca 2016 przez Ehlert Ekspert (212,670 p.)
wybrane 23 czerwca 2016
 
Najlepsza

virtual dajesz do metody, gdy chcesz zdefiniować jej istnienie (wręcz zaznaczyć konieczność jej istnienia) a jeszcze nie wiesz jak będzie dokładnie wyglądać. Wtedy jej ciało muszą zdeklarować klasy pochodne.

Klasa Organizm ma metodę live(). Tyle że jeszcze nie wiesz jak ona będzie wyglądać. Możesz ją opisać dopiero w klasach pochodnych:

class Organism{

     abstract void live();

}

class Plant extends Organism{

     void live(){
          photosynthesis();
          osmosis();
     }

}

class Human extends Organism{

     void live(){
          breathe();
          eat();
     }

}

PS. w Javie wygląda to prawie dokładnie tak samo smiley

komentarz 23 czerwca 2016 przez niezalogowany
nom prawie. hahah popłakałem się ze śmiechu. a jakbyś nie dał abstract to co by się stało??
komentarz 23 czerwca 2016 przez adas94 Nałogowiec (29,200 p.)
Nic by się nie stało, abstract jest dane po to, żebyś nie mógł stworzyć obiektu klasy Organism. Życie organizmy masz potraktować jako coś abstrakcyjnego, coś co de facto nie istnieje jako materialny byt, dopiero jeśli ma to przełożenie konkretnie na człowieka, albo roślinę, to właśnie one (człowiek i roślina) już są konkretnym bytem (obiektem)

 

Edit. tak by było gdyby cała klasa była abstrakcyjna, a teraz widzę, że tam tylko metoda jest abstrakcyjna. Więc to co napisałem wyżej tyczy się samej tej metody, że nie można jej używać w klasie organism, a tylko ma ona zastosowanie w klasach human i plant.
komentarz 23 czerwca 2016 przez niezalogowany
aaa.... ok kumam, dzięki wielkie za pomoc :)
komentarz 23 czerwca 2016 przez Ehlert Ekspert (212,670 p.)
Nie chciałem dawać abstract przy klasie bo kolega zadał pytanie w dziale C++. Użyłem przykładu z Javy. Nie chciałem więcej mieszać, bo zdaje się że w C++ nie ma możliwości tworzenia klas czysto abstrakcyjnych / wirtualnych.
komentarz 23 czerwca 2016 przez niezalogowany
ok, dziedziczenie wygląda podobnie w każdym języku, w końcu zrozumiałem to dzięki wielkie :)
komentarz 24 czerwca 2016 przez Michał Muzyka Pasjonat (24,080 p.)

a to nie powinno wyglądać tak?

class Organism
{
     public:
     virtual void live() = 0;
};
 
class Plant :public Organism
{
     void live(){
          photosynthesis();
          osmosis();
     }
};
 
class Human :public Organism
{
     void live(){
          breathe();
          eat();
     }
};

 

komentarz 24 czerwca 2016 przez niezalogowany
yyy....... nie wiem już
komentarz 24 czerwca 2016 przez Ehlert Ekspert (212,670 p.)

Przecież napisałem, że to Java... frown

komentarz 24 czerwca 2016 przez niezalogowany
no ok :) drobne błędy tam przepuszczam :) ważne że zrozumiałem
+1 głos
odpowiedź 23 czerwca 2016 przez Radfler VIP (101,030 p.)
edycja 23 czerwca 2016 przez Radfler

Tu masz to świetnie wyjaśnione: http://forum.pasja-informatyki.pl/103699/jak-pojeliscie-sens-oop-polimorfizm-i-dziedziczenie

A słowo virtual stawiasz przy funkcji, gdy chcesz jej nadać cech polimorficznych.

Podobne pytania

0 głosów
3 odpowiedzi 589 wizyt
0 głosów
1 odpowiedź 288 wizyt
pytanie zadane 12 października 2018 w C i C++ przez oliwzcak12 Użytkownik (550 p.)
0 głosów
1 odpowiedź 242 wizyt
pytanie zadane 17 listopada 2016 w C i C++ przez Munvik Dyskutant (9,350 p.)

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...