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

Klasa abstrakcyjna na klasę pochodną

Object Storage Arubacloud
0 głosów
138 wizyt
pytanie zadane 3 lutego 2016 w C i C++ przez Łukasz Wasilewski Mądrala (5,190 p.)
Hej!

Właśnie stawiam czoła kolejnemu problemowi i okazuje się, że znów potrzebuje Waszej pomocy.

Do rzeczy!

Najłatwiej będzie mi to opisać na klasie figury.

Otóż mam klasę abstrakcyjną figury, z niej dziedziczą klasy takie jak: koło, trójkąt, kwadrat, romb, gwiazda itd.

Mam też klasę klocki, w której zapisuje w tablicy wkaźniki na figury:

figury *mojeKlocki[40]; (mojeKlocki[0] = new trojkat;)

Mam już te 40 figur w jednej tablicy. Wiem, że na 100% zawsze elementy: 1, 4 i 7 to będą koła.

Koło w moich klockach ma mieć możliwość turlania się, jest to jakaś tam funkcja. Turlać się może tylko koło, nic innego. Żeby zrobić taką funkcję mam 2 możliwości:

1. Napisać funkcje wirtualną turlajSie w figurach, jednak będę musiał napisać ją także dla każdej klasy pochodnej tylko bez ciała, trochę bez sensu, jak będę chciał dodać figurę rownoleglobok to tam tez będę musiał zadeklarować tą funkcję...

2. Z racji tego, że wiem, że 1, 4 i 7 figura w moich klockach to koła, to napiszę tylko dla koła tą funkcję jako zwykłą składową. Jednak nie mogę odwołać się w ten sposób mojeKlocki[1]->turlajSie(), mimo, że wiem, że na 100% jest to koło.

Wyjście jest, stworzyć tablicę kół.

kolo* mojeKola[3]; jednak:

mojeKola[0]=mojeKlocki[1] nie działa, ponieważ kolo* nie może być figura*.

Jak rozwiązać ten problem. Wiem, że w tym konkretnym miejscu na 100% jest dana figura. Nie chcę pisać jednej funkcji x100 bo to do dupy robota.

2 odpowiedzi

+1 głos
odpowiedź 3 lutego 2016 przez draghan VIP (106,230 p.)
wybrane 3 lutego 2016 przez Łukasz Wasilewski
 
Najlepsza

Potrzebujesz rzutowania w dół. :) Nawet, jeśli nie będziesz wiedział na 100%, to za pomocą dynamic_cast dowiesz się, czy jest to koło, czy nie. ;)

komentarz 3 lutego 2016 przez Łukasz Wasilewski Mądrala (5,190 p.)
Dziękuję!!!!! Sam szukałem właśnie w google odpowiedzi, ale nie trafił bym na to. Dzięki bardzo, tego potrzebowałem. :)
+1 głos
odpowiedź 3 lutego 2016 przez Szykem2 Nałogowiec (29,510 p.)

Skoro masz pewność, że tylko te konkretne elementy są kołami to możesz użyć dynamic_cast

if(dynamic_cast<kolo*>(mojeKlocki[1]))
     dynamic_cast<kolo*>(mojeKlocki[1])->turlajsie():

ten if jest po to, że jeśli figura nie jest kołem to dynamic_cast zwraca NULL.

komentarz 3 lutego 2016 przez Łukasz Wasilewski Mądrala (5,190 p.)
Kilka minut później niż kolega wyżej dlatego nie najlepsza, ale dziękuję również. Nie wiedziałem o istnieniu tej funkcji(?). :)
komentarz 3 lutego 2016 przez draghan VIP (106,230 p.)

dynamic_cast<>() jest operatorem, działającym w czasie wykonania programu. :)

Podobne pytania

0 głosów
3 odpowiedzi 723 wizyt
0 głosów
1 odpowiedź 683 wizyt
0 głosów
2 odpowiedzi 3,799 wizyt
pytanie zadane 14 listopada 2016 w C i C++ przez xjakubekx Obywatel (1,280 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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!

...