Klasy i ich obiekty
Ostatnio zmodyfikowano 2012-08-28 00:14
palkoul Temat założony przez niniejszego użytkownika |
Klasy i ich obiekty » 2012-08-27 20:27:33 Witam Was serdecznie. Nie wiem jak to opisać w słowa ale postaram się wytłumaczyć mój błąd. Piszę sobie Framework (czy coś w tym guście) i mam np. pliki PFmain.hpp i init.cpp. Plik PFmain.hpp #ifndef _PFMAIN_HPP_ #define _PFMAIN_HPP_
#include <SDL/SDL.h>
class PF { private: bool Wlaczony; SDL_Surface * PF_Ekran; SDL_Surface * obrazek; };
#endif
Plik init.cpp #include "PFmain.hpp"
int PF::Init() { obrazek = PFgfx::WczytajBMP( "obrazek.bmp" ) }
I teraz tak. W pliku PFmain.hpp tworze SDL_Surface o nazwie obrazek i potem bez problemu mogę wykonywać na nim operacje w PF::Init(). Lecz nie chcę by jakieś zmienne (SDL_Surface, obiekty itp) były dodawane w plikach od Framework'a. Da się jakoś uzupełnić klasę albo dodawać do niej zmienne? Gdy tworze jakąś zmienną gdziekolwiek indziej to wyskakuję błąd, że nie ma takiej zmiennej (logiczne, w klasie PF zmienne są dostępne w procedurach klasy PF). Myślałem by zrobić coś takiego: #ifndef _PFMAIN_HPP_ #define _PFMAIN_HPP_
#include <SDL/SDL.h>
class PF : public Obiekt { private: bool Wlaczony; SDL_Surface * PF_Ekran; SDL_Surface * obrazek; };
#endif
I w swoim pliku (taki, który sam utworzę a nie od Framework'a) bym stworzył klasę Obiekt i tam bym dodawał jakieś zmienne (nie zapominając o konstruktorze, że musi być tam np. obrazek = NULL), tylko czy by to działało? Proszę o pomoc, nakierowanie, czy cokolwiek. Pozdrawiam, Palkoul. |
|
cyklopek11 |
» 2012-08-27 21:01:38 Pomógłbym ale nie bardzo kumam o co ci chodzi? Zakręciłeś troche :-) Możesz ująć to jakoś inaczej?
Rozumiem, że deklaracja: int Init(); jest gdzieś w klasie w pliku .hpp ???
Na SDL'u kompletnie się nie znam ale w takim wypadku, jeśli may klasę B która to dziedziczy prywatnie po klasie A to: - w zasięgu klasy B mamy dostęp do wszystkich zmiennych/funkcji klasy A które były protected i public ale jednocześnie na zewnątrz klasy B żadne z tych składowych nie są dostępne. A więc jeśli dobrze zrozumiałem o co ci chodzi to odpowiedź: dziedziczenie prywatne (ewentualnie dziedziczenie protected jeśli chcesz dalej dziedziczyć pewne składowe) + dopisanie własnych, dodatkowych zmiennych, metod o takim dostępie jakim chcesz ... |
|
Mike148 |
» 2012-08-27 21:08:33 Chodzi mu o to że gdy napisze swój framework w SDL'u i gdy to będziesz używał, i dodasz jeden z plików nagłówkowych framework'a to abyś nie mógł korzystać z funkcji, klas itp. SDL'a. Według mnie to chyba jest nie możliwe o ile nie ma jakieś specjalnej dyrektywy preprocesora która to zabezpieczy,ponieważ na koniec wszystko jest łączone do kupy. |
|
palkoul Temat założony przez niniejszego użytkownika |
» 2012-08-27 21:41:46 Zrobiłem tak jak napisał Cyklopek11 i działa :) dzięki wielkie. Temat zamykam. PS. Kod: #ifndef _PFMAIN_HPP_ #define _PFMAIN_HPP_
#include <SDL/SDL.h> #include "obiekt.hpp"
class PF : public PFevent , public Obiekt { private: bool Wlaczony; SDL_Surface * PF_Ekran; public: PF(); int Init(); }; #endif
#ifndef _OBIEKT_HPP_ #define _OBIEKT_HPP_
#include <SDL/SDL.h>
class Obiekt { public: Obiekt(); SDL_Surface * Obrazek; SDL_Surface * Haha; }; #endif
#include "main.hpp"
int PF::Init() { if(( Obrazek = PFgfx::WczytajBMP( "test.bmp" ) ) == false ) { return - 1; } if(( Haha = PFgfx::WczytajBMP( "test.bmp" ) ) == false ) { return - 1; } return 0; }
|
|
cyklopek11 |
» 2012-08-27 21:45:55 Chwila albo późna godzina albo ja nie widzę tego dziedziczenia prywatnego ? |
|
palkoul Temat założony przez niniejszego użytkownika |
» 2012-08-28 00:14:27 Użyłem Twej idei lecz trochę zmienionej :] nie wiń mnie za to, po prostu w ten sposób mi się podoba. |
|
« 1 » |