Przeładowanie operatora << (C++)

0

Witam mam na zaliczenie napisać grę gółko i krzyżyk w C++, Już mam całą grę, jednak okazało się, że muszę do wyświetlania planszy użyć przeładowanego operatora <<. Do wyświetlania planszy mam funkcję void rysuj(); do której odwołuję się w kilku miejscach mojego programu. Jak mam zaimplementować przeładowanie tego operatora?

klasa kółko i krzyżyk:

class kik
{
protected:
int wymiar,wygrana, l_ruch;
char gracz,pc,znak;
char **plansza;

public:
kik();
kik(int _wymiar, int _wygrana,char _znak);
~kik();

void kik::si();
void kik::rysuj();
void kik::ruch_gracza();
void kik::ruch_pc();
bool kik::wygrywa_gracz();
bool kik::wygrywa_pc();
bool kik::remis();
}; //koniec klasy

Moja funkcja do wyświetlania:

void kik::rysuj()
{
system("cls");

for(int i = 1; i <= wymiar; i++)
cout << " " << i << " "; //wyswietlanie numerow kolumn
cout<<endl;

for(int i = 1; i <= wymiar; i++)
for(int j = 1; j <= wymiar; j++)

{
if(plansza[j]==plansza[1])
cout <<i<< " " << plansza[i][j] << " "; //wyswietlanie numerow wierszy
else cout<< " " << plansza[i][j] << " ";

if(j % wymiar)
cout << "|";
if(j%wymiar==0)
if(i==j)
cout<<endl;
else
{
cout<<endl;
for(int j=0;j<wymiar;j++)
{

if (j==0)
cout<<" ---+"; //w pierwszej kolumnie

if(j>0 && j<wymiar-1)
cout<<"---+"; //w pozostalych kolumnach
if(j==wymiar-1)
cout<<"---"; //w ostatniej kolumnie
}
cout<<endl;
}
}
}

Napisałem rysowanie planszy z przeładowaniem, tylko teraz nie wiem jak mam się do tego odwołać z innych funkcji.

ostream&operator<<(ostream&s,kik&c)
{
system("cls");

for(int i = 1; i <= c.wymiar; i++)
s << " " << i << " "; //wyswietlanie numerow kolumn
s<<endl;

for(int i = 1; i <= c.wymiar; i++)
for(int j = 1; j <= c.wymiar; j++)

{
if(c.plansza[j]==c.plansza[1])
s <<i<< " " << c.plansza[i][j] << " "; //wyswietlanie numerow wierszy
else s<< " " << c.plansza[i][j] << " ";

if(j % c.wymiar)
s << "|";
if(j%c.wymiar==0)
if(i==j)
s<<endl;
else
{
s<<endl;
for(int j=0;j<c.wymiar;j++)
{

if (j==0)
s<<" ---+"; //w pierwszej kolumnie

if(j>0 && j<c.wymiar-1)
s<<"---+"; //w pozostalych kolumnach
if(j==c.wymiar-1)
s<<"---"; //w ostatniej kolumnie
}
s<<endl;
}
}
return c;
}

0
cout << obiekt_twojej_klasy << endl; 
0

tak, tylko ja nie chcę wywołać obiektu klasy tylko funkcję rysującą planszę. Np. z funkcji void ruch_gracza() chcę przejść do funkcji rysuj.

0

tylko ja nie chcę wywołać obiektu klasy
Ty nie wywołujesz obiektu klasy, tylko jak już to najwyżej operator. Tak jak napisał Karolaq, jak chcesz inaczej to zrobić? Operator to operator, chcesz narysować planszę, to w ruch_gracza() robisz to co napisał Karolaq. Chyba, że chodzi ci o wykorzystanie operatora w drugą stronę na rzecz twojej klasy, coś takiego:

obj << // i co dalej? coś byś musiał tu wstawić za argument operatora.. czyli np. strumień - gdzie ma ta plansza się narysować lub coś innego
0

Można powiedzieć, że popełniasz błąd projektowy. Powinieneś utworzyć przynajmniej 2 klasy: Plansza i ten Twój Kik. W tym momencie rzeczywiście to nie ma sensu bo musiałbyś robić coś takiego:

cout << *this;
0

Już sobie poradziłem z problemem, dziękuję bardzo za pomoc:)

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