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

Porównywanie obiektów różnych klas C++

Aruba Cloud PRO i VPS, Openstack, VMWare, MS Hyper-V
0 głosów
117 wizyt
pytanie zadane 25 kwietnia 2022 w C i C++ przez Mavimix Dyskutant (8,410 p.)

Mam klasę abstrakcyjną:

class Pet
{
     public: virtual void sayHello();
};

Oraz klasę pochodną:

class Dog : public Pet
{
     void sayHello()
     {
          std::cout<<"Hello";
     }
};

class Cat: public Pet
{
     void sayHello()
     {
          std::cout<<"meh";
     }
};

Oraz mam wektor wskaźników na klasę abstrakcyjną:

Dog dog;
Cat cat;

std::vector<Pet*> pets;

pets.push_front(&dog);
pets.push_front(&cat);

Czy jest jakiś sposób aby porównać czy element wektora jest np. klasy Dog? Coś w ten deseń:

if(pets[1] == Dog)
//Ten konkretny przyklad powoduje blad "C++ type name is not allowed"
//if(<element wektora> == <klasa pochodna>

 

1 odpowiedź

+1 głos
odpowiedź 25 kwietnia 2022 przez adrian17 Ekspert (328,540 p.)
wybrane 25 kwietnia 2022 przez Mavimix
 
Najlepsza

Tak, jest dynamic_cast:

if (dynamic_cast<Dog*>(pets[1]) != nullptr) {...}

Można też porównywać typy dwóch obiektów:

https://stackoverflow.com/questions/46837843/check-if-two-smart-pointers-point-to-the-same-derived-class

komentarz 25 kwietnia 2022 przez Oscar Nałogowiec (27,890 p.)
Ale pozostaje kwestia czy chodzi o sprawdzenie czy obiekt jest dokładnie klasy Dog, czy też jakiejś klasy pochodnej (zawierających w sobie klasę Dog) np. poszczególnych psich ras.

Podobne pytania

0 głosów
2 odpowiedzi 367 wizyt
+1 głos
1 odpowiedź 195 wizyt
0 głosów
2 odpowiedzi 177 wizyt

90,401 zapytań

139,014 odpowiedzi

311,514 komentarzy

60,082 pasjonatów

Motyw:

Akcja Pajacyk

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

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...