Wiele obiektów i wiele funkcji

0

Cześć. Mam sobie taką klasę

class Postac
        {
            string imie;
        public:
            Postac(string);
            void powiedz();

        };
        Postac::Postac(string n)
        {
            imie = n;
        }

Następnie w int main tworzę 5 obiektów

int main()
    {

        Postac Adam("Adam");
        Postac Piotr("Piotr");
        Postac Kacper("Kacper");
        Postac Radek("Radek");
        Postac Mateusz("Mateusz");

    }

I w tym momencie mam zagwozdkę. Chciałbym aby każdy z tych obiektów miał swoją własną opcję dialogową (Mogą mieć również kilka opcji). Oczywiście mógłbym sprawdzać na if'ach if(imie == "Adam") jednak przy większej ilości postaci będzie (mam wrażenie) to bardzo męczące oraz nieestetyczne kiedy musiałbym stworzyć 70 if'ów (lub tworzyć oddzielnie void powiedzAdam() itd). Czy powinienem to rozwiązać w taki sposób

class Postac
        {
        public:
            virtual void powiedz()=0;

        };
class Adam :public Postac
{
    string imie;
public:
        Adam(string n)
        {
            imie = n;
        }
        virtual void powiedz()
        {
            cout<<"Czesc jestem Adam"<<endl;
        }
};

int main()
    {
        Adam adam("Adam");
        Postac *wybor;
        wybor = &adam;
        wybor -> powiedz();

    }

Jest na to inny, lepszy sposób czy ten jest jak najbardziej poprawny?

1

Lista dialogowa może przecież być takim samym parametrem jak i imię

Postac Adam("Adam");
Adam.dodaj_kwestie('Czesc jestem Adam');

Dziedziczenie z polimorfizmem ma miejsce gdy dla poszczególnych typów zachowanie ma być różne. Tu zachowanie jest takie same - wypowiedzenie kwestii - różni się tylko sama kwestia, a zatem parameter. Zadeklaruj sobie zatem w klasie prywatny wektor z tekstami i inicjuj w konstruktorze lub setterze.

0

Z pewnych przyczyn jednak zależy mi aby było to zapisane w funkcji void bez tworzenia parametru kwestia. W innym wypadku zrobiłbym tak samo jak ty.

0

Z tych pewnych przyczyn. Chciałem od razu w funkcji void powiedz(); wykonać parę innych działań czyli przykładowo:
Funkcja powiedz u Adam
//Mowi tekst
// Pyta sie o dwie liczby
// Oblicza sume tych liczb
// Wyswietla wynik

Funkcja powiedz u Piotr
// Mowi tekst
// Pyta sie o dwie liczby
// Oblicza iloczyn tych liczb
// Wyswietla wynik
itd.

Mogłem de facto zawrzeć to wcześniej, nie wiem czemu tego nie zrobiłem.

0

Poczytaj o wzorcu Strategia.

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