Ĺadny brzuch
wiec w SDL'u zdefiniowana jest następująca struktura:
typedef struct { Uint32 flags; SDL_PixelFormat * format; int w, h; Uint16 pitch; void * pixels; SDL_Rect clip_rect; int refcount; } SDL_Surface;
Chciałbym powiększyć nieco funkcjonalność tej klasy. Więc definiuje klasę Screen w postaci:
class Screen: public SDL_Surface { //tutaj jakies pola i metody... };
Teraz po ustawieniu SDL'a:
SDL_Init( SDL_INIT_EVERYTHING );
wywołuje funkcje która zwraca mi wskaźnik do struktury "SDL_Surface":
Screen * screen = NULL; screen = SDL_SetVideoMode(1024, 768, 32, SDL_SWSURFACE );
Oczywiście kod ten jest niepoprawny, zachodzi tutaj rzutowanie wskaźnika od klasy bazowej do wskaźnika klasy pochodnej.
Moje pytanie, co zrobić aby ten kod zadziałał, czy można w jakiś sposób przeciążyć operator '=' ?
Moje pytanie, co zrobić aby ten kod zadziałał, czy można w jakiś sposób przeciążyć operator '=' ?
Ależ oczywiście, że można ;)
Do klasy dodajesz coś takiego:
MyClass& operator=(const MyNewType& mc) { // tutaj operacje przypisania }
Albo możesz dodać konwresję do klasy.
class Screen { public: Screen(const SDL_Surface&) { flags = SDL_Surface.flags; format = SDL_Surface.format; // ... } };
Użytkownik neosnooze edytował ten post 28 lipiec 2008, 09:07
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
typedef struct { Uint32 flags; SDL_PixelFormat * format; int w, h; Uint16 pitch; void * pixels; SDL_Rect clip_rect; int refcount; } SDL_Surface;
Chciałbym powiększyć nieco funkcjonalność tej klasy. Więc definiuje klasę Screen w postaci:
class Screen: public SDL_Surface { //tutaj jakies pola i metody... };
Teraz po ustawieniu SDL'a:
SDL_Init( SDL_INIT_EVERYTHING );
wywołuje funkcje która zwraca mi wskaźnik do struktury "SDL_Surface":
Screen * screen = NULL; screen = SDL_SetVideoMode(1024, 768, 32, SDL_SWSURFACE );
Oczywiście kod ten jest niepoprawny, zachodzi tutaj rzutowanie wskaźnika od klasy bazowej do wskaźnika klasy pochodnej.
Moje pytanie, co zrobić aby ten kod zadziałał, czy można w jakiś sposób przeciążyć operator '=' ?
Moje pytanie, co zrobić aby ten kod zadziałał, czy można w jakiś sposób przeciążyć operator '=' ?
Ależ oczywiście, że można ;)
Do klasy dodajesz coś takiego:
MyClass& operator=(const MyNewType& mc) { // tutaj operacje przypisania }
Albo możesz dodać konwresję do klasy.
class Screen { public: Screen(const SDL_Surface&) { flags = SDL_Surface.flags; format = SDL_Surface.format; // ... } };
Użytkownik neosnooze edytował ten post 28 lipiec 2008, 09:07