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

[c++] wskaźniki na metody

Ostatnio zmodyfikowano 2014-04-14 18:10
Autor Wiadomość
Szary
Temat założony przez niniejszego użytkownika
[c++] wskaźniki na metody
» 2014-04-14 16:59:04
Cześć, program jest osobny tylko dla tego problemu.

Nierozumiem, dlaczego wkaźnik nie uruchamia funkcji lub co też jest możliwe w ogóle nie rozumiem działania tego wskaźnika.
C/C++
#include <iostream>

using namespace std;

class lol
{
public:
    void( lol::* wsk )();
    void funkcja();
    void set();
};

int main()
{
    lol o;
    o.wsk = nullptr;;
    cout << o.wsk << endl;
    o.set();
    o.wsk; // to nie uchamia funkcji
    // (o.*wsk)(); to się nie kompitule
    //
   
    system( "PAUSE" );
    return 0;
}

void lol::funkcja()
{
    cout << "Lol wywołałeś funkcję!" << endl;
}


void lol::set()
{
    wsk = & lol::funkcja;
}
 
PS wie ktoś jak przekształcić liczbę (int) na wkaźnik lub tablicę tak by można było operować na każdej cyfrze osobno?
P-108164
Adik80
» 2014-04-14 17:11:06
samo o.wsk zwraca ci wskaznik, ale musisz go wywolac na rzecz jakiegos obiektu, czyli powinno byc (o.*o.wsk)();
P-108166
michal11
» 2014-04-14 17:13:57
Co do konwersji int na tablicę to napisz sobie funkcję, to nie jest nic trudnego.
P-108167
Szary
Temat założony przez niniejszego użytkownika
» 2014-04-14 17:56:42
Dobra a jeżeli całość jest wykonywana w innej metodzie tej klasy?
C/C++
class Player
    : public Event
{
public:
    Player( SDL_Renderer * );
    ~Player();
   
    void update();
    void draw() const;
   
private:
    typedef void( Player::* MOVE )();
    MOVE move;
    void goLeft();
    void goRight();
    void goDown();
    void goUp();
   
    Sprite * boy;
};

void Player::update()
{
    if( keyDown )
    {
        std::cout << "key is down" << std::endl;
        switch( getEvent()->key.keysym.sym )
        {
        case SDLK_UP:
            move = & Player::goUp;
            ( Player::* Player::move )();
            break;
        case SDLK_DOWN:
            down = true;
            goDown();
            break;
        case SDLK_LEFT:
            left = true;
            goLeft();
            break;
        case SDLK_RIGHT:
            goRight();
            right = true;
            break;
            default:
            break;
        }
    }
    //...
}
P-108170
Monika90
» 2014-04-14 18:10:11
( this->* move )();
P-108171
« 1 »
  Strona 1 z 1