Metody wirtualne

0

Klasa główna:

class pionek
{
private:
    int pozycja;        // pozycja na planszy
public:
    virtual void przesun(int ile);
    void set_pozycja(int n);
}

Klasa pochodna:

class pionek_gracza : public pionek
{
public:
    void przesun(int ile);
}; 

Tego nie mogę wykonać, bo 'pozycja' jest private dla Pionek. Jak więc to inaczej zrobić?

void pionek_gracza::przesun(int ile)
{
    set_pozycja(pozycja += ile);
} 
2

albo:
protected:
int ; // pozycja na planszy
albo:
public:
int get_pozycja()const { return pozycja; }

Poza tym przesunięcia akurat może załatwić klasa pionek.

2

zamień na protected.

 
class pionek
{
protected:
    int pozycja;        // pozycja na planszy
public:
    pionek(){}
    virtual void przesun(int ile) = 0;
    void set_pozycja(int n);
};
 
void pionek::set_pozycja(int n)
{
    pozycja = n;
}
 
class pionek_gracza : public pionek
{
public:
    pionek_gracza(){}
    void przesun(int ile);
};
 
void pionek_gracza::przesun(int ile)
{
    set_pozycja(pozycja+ile);
} 
 
int main()
{
    pionek_gracza *pg = new pionek_gracza();
    pg->przesun(5);
    delete pg;
    return 0;
}

edit lub zrób getter jak pisze @_13th_Dragon (kurde trzeba coś zrobić z tym, że piszę posta i zapisze za późno ;))

0

do{
(...)
}while(p1[0]->podaj_pozycje() < get_rozmiar()+1);

Pionek przekracza linię mety - koniec gry. Ale tylko p1[0], jak sprawdzać, żeby wszystkie 3 przeszły metę dopiero koniec?

0

zrób zmienną do każdego pionka zmienną boolowską czy skończył, jeżeli wszystkie będą na true to wtedy koniec

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