Использование наследования для передачи нестатической переменной между классами - PullRequest
2 голосов
/ 30 января 2012

Я исследую пользовательский интерфейс как портфельный проект и столкнулся с небольшим количеством проблем, когда дело доходит до наследования.Проблема, с которой я сталкиваюсь, заключается в следующем: у меня есть два класса, R_GUI, в котором я рисую форму, и Button, где я рисую кнопки.Я хочу, чтобы кнопки были расположены внутри формы.Я сохраняю позицию ФОРМЫ как form_x и form_y.Вот мои два класса:

class R_GUI 
{

private:


    bool get_pos_only_once;
    bool move_form;

public:
    int form_x, form_y;
    int form_height, form_width;
    int handle_bar_y;

    inline void Form(int pos_x, int pos_y, int height, int width);
    //inline void Button(int id, string ButtonText, int pos_x, int pos_y);

    inline void Update_form(void);

    inline void UPDATE(void);

    inline ~R_GUI( );
    inline R_GUI( )
    {
        d3dInit();
        get_pos_only_once = false;
        move_form = false;
        form_x = 0;
        form_y = 0;
        handle_bar_y = 40;
    }
};

и класс Button:

class Button: public R_GUI
{

private:
    int b_form_x, b_form_y;
    int b_handle_y;
    int button_width, button_height;

public:
    inline void Draw(string ButtonText, int b_pos_x, int b_pos_y);
    Button()
    {

        b_form_x = R_GUI::form_x;
        b_form_y = R_GUI::form_y;
        b_handle_y = 20;

        button_width = 90;
        button_height = 35;
    }

    ~Button();



};

Как вы можете видеть, я пытаюсь дать b_form_x значение form_x (которое является переменнойот R_GUI).form_x имеет значение, заданное в Form ();:

inline void R_GUI::Form(int pos_x, int pos_y, int height, int width)
{
    if(get_pos_only_once == false)
    {
        form_x = pos_x;
        form_y = pos_y;
        form_height = height;
        form_width = width;

        get_pos_only_once = true;
    }

    //Create the form outline
    d3dLine(pos_x,pos_y,pos_x+width,pos_y,dbRGB(50,50,50));
    d3dLine(pos_x,pos_y,pos_x,pos_y+height,dbRGB(50,50,50));
    d3dLine(pos_x+width,pos_y,pos_x+width,pos_y+height,dbRGB(50,50,50));
    d3dLine(pos_x,pos_y+height,pos_x+width,pos_y+height,dbRGB(50,50,50));

    //Create the handle bar
    d3dLine(pos_x,pos_y+handle_bar_y,pos_x+width,pos_y+handle_bar_y,dbRGB(50,50,50));

    //Fill the Handlebar;
    d3dBox(pos_x,pos_y,pos_x+width,pos_y+handle_bar_y,dbRGB(3,3,3),dbRGB(3,3,3),dbRGB(3,3,3),dbRGB(3,3,3));


}

Тем не менее, когда я обновляю Позицию формы, значение R_GUI :: form_x не изменяется.Есть идеи, что я делаю не так?

1 Ответ

0 голосов
/ 30 января 2012

Вы не хотите иметь вторую переменную в своем подклассе (b_form_x). Устраните это полностью. Вместо этого вы хотите использовать this->form_x, который в Button будет унаследован от R_GUI. То же самое относится к b_form_y.

this относится к текущему экземпляру объекта и содержит не только ваши локальные переменные-члены, но также любые переменные-члены, унаследованные от классов на всем протяжении иерархии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...