Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Klasy i ich obiekty

Ostatnio zmodyfikowano 2012-08-28 00:14
Autor Wiadomość
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

C/C++
#ifndef _PFMAIN_HPP_
#define _PFMAIN_HPP_

#include <SDL/SDL.h>

//... itd.


class PF
{
private:
   
    bool Wlaczony;
   
    SDL_Surface * PF_Ekran;
   
    SDL_Surface * obrazek;
   
    // itd.
};

#endif

Plik init.cpp

C/C++
#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:
C/C++
#ifndef _PFMAIN_HPP_
#define _PFMAIN_HPP_

#include <SDL/SDL.h>

//... itd.


class PF
    : public Obiekt
{
private:
   
    bool Wlaczony;
   
    SDL_Surface * PF_Ekran;
   
    SDL_Surface * obrazek;
   
    // itd.
};

#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.

P-63812
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 ...
P-63817
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.
P-63818
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:
C/C++
//plik PFmain.hpp"
#ifndef _PFMAIN_HPP_
#define _PFMAIN_HPP_

#include <SDL/SDL.h>
#include "obiekt.hpp"
//itp.

class PF
    : public PFevent
    , public Obiekt
{
private:
   
    bool Wlaczony;
   
    SDL_Surface * PF_Ekran;
   
public:
   
    PF();
   
    int Init();
   
    //itp.
};
#endif
C/C++
//plik obiekt.hpp
#ifndef _OBIEKT_HPP_
#define _OBIEKT_HPP_

#include <SDL/SDL.h>

class Obiekt
{
public:
    Obiekt();
   
    SDL_Surface * Obrazek;
    SDL_Surface * Haha;
};
#endif
C/C++
//plik init.cpp
#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;
}
P-63822
cyklopek11
» 2012-08-27 21:45:55
Chwila albo późna godzina albo ja nie widzę tego dziedziczenia prywatnego ?
P-63826
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.
P-63832
« 1 »
  Strona 1 z 1