Polimorfizm - zmienne jednej klasy w drugiej

0

Witam.

Mam pewien problem związany z klasami w C++. Mam klasę Mag utworzoną z abstrakcyjnej klasy Postać i chcę użyć jej zmiennych w odrębnej klasie Lokacja. Tylko nie wiem w jaki sposób je przekazać.

Na razie istnieje tylko jedna klasa utworzona polimorficznie. Na razie chcę dopracować wszystko na jednej klasie, dodając później tylko kolejne mając już podstawę.

Nie wiem po prostu jak wykorzystać np. zmienną lvl w klasie Lokacja. Wysłać tam wkaźnik jako argument? Bo stricte obiektu nie mogę wysłać, ze względu na to, że w przyszłości dodam kilka innych klas wybieranych poprzez switcha, a to będzie wymagało powielenia kodu dla każdej z klas. Myślę, że da się to rozwiązać unikając niepotrzebnej redundancji.

KLASA ABSTRAKCYJNA I KLASA POSTAC

#include <iostream>
#include <windows.h>
#include <cstdlib>
 
 using namespace std;
 
 
 
    class Postac
    {
        friend class Lokacja;
 
    public:
 
        virtual void statystyki() = 0;
    };
 
 
 
 
    class Mag :public Postac
    {
            friend class Lokacja;
 
        int zdrowie = 75;
        int mana = 125;
        int sila = 10;
        int zrecznosc = 12;
        int talent_mag = 2;
        int akt_zdrowie = 75;
        int akt_mana = 125;
        int lvl = 1;
        int exp = 1;
 
    public:
 
            void statystyki();
    };

KLASA LOKACJA

#include <iostream>
#include <windows.h>
#include <cstdlib>
 
 using namespace std;
 
class Lokacja
{
    void staty();     // W tej metodzie chce uzyc zmiennych z klasy Postac,
};                    // powiedzmy, że zmiennej lvl

A w ten sposób rozwiązałem ustawianie wskaźnika:

Mag mg;
 
Postac *kto;
kto = &mg;
0

friend class jest zbędny. Możesz napisać metodę zwracającą wartość pola lvl.

int getLvl() {return this->lvl;}

Przekazujesz do metody staty() obiekt klasy Mag i później korzystasz z metody zwracającej ww dane.

void staty(const Mag& m) 
{
    auto data = m.getLvl();
} 

dynamic_cast<>() jest bezpieczniejszym rzutowaniem.

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