Tworzenie/odwoływanie się do obiektów

0

Mam taki problem:

void gra::start(int a, int b)
{
  if (a==1) 
  gracz g; //klasa
  else 
  gracz_bogaty g; //klasa pochodna od klasy gracz
  
  komputer_exteended k;
    
  g.przedstaw_sie(); //nie widac
  k.przedstaw_sie(); //widac, dziala
};

Chcę mieć możliwość wyboru jaką klasę stworzyć, może być to po prostu gracz, ale może być też jakaś rozszerzona wersja tej klasy, czyli w tym przypadku gracz_bogaty.
Problem mój polega na tym że nie wiem jak ustawić te obiekty klas abym mógł to sobie z poziomu programu wybierać jakiej klasy chce użyć, a potem w programie żebym mógł odwoływać się do metod wcześniej wybranych klas (czyli np. tak jak tutaj jest g.metoda(); )

0

Albo twórz puste metody w klasie gracz_bogaty, które ma klasa gracz (nie jestem pewien co do poprawności), albo wywołuj metodę w zależności od tego, czy jest gracz czy gracz_bogaty. Czyli stwórz sobie w obu klasach zmienną static const bool (lub inny typ) i przypisz jej wartości w zależności od tego czy jest to gracz czy gracz_bogaty.

1

Na pierwszy rzut oka jest kilka możliwości:

  1. Typ gracza(biedny/bogaty) może być stanem obiektu klasy gracz i w metodzie przedstaw_sie dajesz ifa/switch-a
  2. gracz_bogaty dziedziczy po gracz i overriduje wirtualną metodę przedstaw_sie. Wówczas działasz tak:
  gracz *g;
  if(...)
    g = new gracz();
  else
    g = new gracz_bogaty();

  g->przedstaw_sie();
0

Wielkie dzięki, sposób drugi działa dokładnie tak jak potrzebuję.
Dzięki za szybką pomoc!

0

powinno być trochę inaczej niż napisał @mychal - powinieneś mieć interfejs IGracz z wszystkimi wymaganymi metodami, właściwościami, delegatami itd. i każdy gracz powinien po nim dziedziczyć i odpowiednio implementować to co narzuca interfejs

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