Zamiana C++ na C

0

Witam, mam problem z kawałkiem kodu C++:

class gra
{
	public:
			gra();
			~gra();
			void kolor(int K);				//zmienia kolor tekstu
			void gotoxy(int x, int y);		//przenosi kursor do danych wspolrzednych
			virtual void poczatek();		//wyswietla ekran poczatkowy
			virtual void koniec();			//wyswietla ekran koncowy

	protected:
			int *wynik;

};

Jak zamienić to żeby działało w C?

0

Nie zamienisz - w C nie ma klas, bo C nie jest językiem obiektowym jak C++.

2

Jeśli cały projekt jest napisany tak obiektowo to moze być trochę do poprawiania.

Jeśli chcesz to robić "na chama" (czyli bezpośrednio zmieniać każdy kawałek na odpowiednią konstrukcję:

  1. zamienić
class gra

na struct gra

2) zamienić 
```cpp
void kolor(int K)

na void kolor(gra *this, int K)

 i tak z wszystkimi metodami
3) w implementacji metod zamienić odniesienia do pól klasy na 
```c
this->nazwa_pola

(gdzie this to wskaźnik z pierwszego parametru
4) jawnie wywoływać konstruktor wszędzie (konstruktor też przepisać na metodę przyjmującą gra *this).
5) najciekawiej będzie z wirtualnymi metodami. W skrócie musisz sam zaimplementować VTable. Albo dla uproszczenia, trochę bardziej prymitywną wersję, czyli pole ze wskaźnikiem na metodę dla każdej metody.

Ostatecznie z tego kodu wyjdzie coś w rodzaju:

typedef void (*voidfx)();

struct gra {
    voidfx poczatek;
    voidfx koniec;
    int *wynik;
}

void gra_ctor(gra *this) {
    ...
    this->poczatek = gra_poczatek; // o ile nie czysto wirtualna
    this->koniec = gra_koniec; // o ile nie czysto wirtualna
}

void gra_dtor(gra *this) { ... }
void gra_kolor(gra *this, int K);                //zmienia kolor tekstu
void gra_gotoxy(gra *this, int x, int y);        //przenosi kursor do danych wspolrzednych

A użycie gry zmieni się z:

void func() {
    gra g;
    g.kolor(2);
}

Na:

void func() {
    gra g;
    gra_ctor(&g);
    gra_kolor(&g, 2);
    gra_dtor(&g);
}

Możesz zawsze spróbować przepisać kod trochę bardziej inteligentnie, tzn. zmieniając trochę więcej, ale na to nie ma już jednego dobrego sposobu.

PS. Jeśli są używane dużo szablony, może być jeszcze gorzej.

0

Naprawdę nic się z tym nie da zrobić?

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