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

Statyczne funkcje i zmienne w klasie

Ostatnio zmodyfikowano 2012-07-31 21:48
Autor Wiadomość
SocrateZ
Temat założony przez niniejszego użytkownika
Statyczne funkcje i zmienne w klasie
» 2012-07-31 21:24:37
W sumie to mam problem... :D, albo pytanie...

Czy da się zmienić w klasie statyczną metodą statyczną zmienną? :D
I czy da się przekazać zmienną statyczną do jakieś funkcji?
Jak ktoś nie zrozumiał:

Klasa
C/C++
class EControl
{
private:
    static ALLEGRO_SYSTEM_MOUSE_CURSOR _oldCursor;
    unsigned short _startX;
    unsigned short _startY;
    unsigned short _stopX;
    unsigned short _stopY;
    unsigned short _centerX;
    unsigned short _centerY;
    unsigned char _textAscent;
    static ALLEGRO_MOUSE_CURSOR * _newCursor;
public:
    static void setCursor( ALLEGRO_SYSTEM_MOUSE_CURSOR cursor );
    static void setCursor( ALLEGRO_MOUSE_CURSOR * cursor );
    static void displayCursor( ALLEGRO_DISPLAY * display );
};

Definicja
C/C++
void EControl::displayCursor( ALLEGRO_DISPLAY * display )
{
    std::cout << sizeof( EControl::_oldCursor ); // OK
    ///////////////////////////////////////////////////////
    EControl::_oldCursor = ALLEGRO_SYSTEM_MOUSE_CURSOR_DEFAULT; // FAIL :(
    al_set_system_mouse_cursor( display, EControl::_oldCursor ); // FAIL x2 ? :(
}
P-61537
DejaVu
» 2012-07-31 21:41:14
Tworzysz metodę statyczną, przekazujesz jej jako argument wskaźnik na klasę i wówczas wywołujesz metodę zwykłą z klasy przekazanej poprzez argument.
P-61540
SocrateZ
Temat założony przez niniejszego użytkownika
» 2012-07-31 21:44:25
Hmm... ja głupi wcześniej nie wpadłem...
Czyli tak:
C/C++
ALLEGRO_SYSTEM_MOUSE_CURSOR EControl::_oldCursor = ALLEGRO_SYSTEM_MOUSE_CURSOR_LINK;
ALLEGRO_MOUSE_CURSOR EControl::* _newCursor = NULL;

void EControl::displayCursor( ALLEGRO_DISPLAY * display )
{
    if( EControl::_oldCursor ) al_set_system_mouse_cursor( display, EControl::_oldCursor );
    else if( !EControl::_newCursor ) al_set_mouse_cursor( display, EControl::_newCursor );
   
}

void EControl::setCursor( ALLEGRO_MOUSE_CURSOR * cursor )
{
    ALLEGRO_MOUSE_CURSOR * _newCursor = cursor;
}

I do setCursor przekazuje klasę jako argument?
Trochę to idiotyczne :/

PHP ma self... Szkoda że tutaj tego nie ma -.-
P-61541
DejaVu
» 2012-07-31 21:46:01
W C++ nie trzeba pisać wspomnianego "self" wcale (więc go nie ma) :) Więc czy takie głupie to bym nie powiedział. Można również pisać
this->metoda();
.

/edit:
@up: nie chce mi się analizować kodu - dostałeś w każdym razie informację jak osiągnąć cel.
P-61542
SocrateZ
Temat założony przez niniejszego użytkownika
» 2012-07-31 21:48:23
Hmm... PHP też ma this, nawet parent... tutaj trzeba zadbać o to samemu :/
No i tutaj widzę this nie przejdzie...

@up
Ok, wiem już jak się za to zabrać :)
Dzięki za pomoc
P-61543
« 1 »
  Strona 1 z 1