0 / 0 / 0
Регистрация: 22.10.2016
Сообщений: 2
1

Переопределение переменной класса-родителя

22.10.2016, 21:20. Показов 3162. Ответов 3
Метки нет (Все метки)

Есть базовый класс button_c и производный от него about_c. В about_c я попытался переопределить значения переменных w, h, dir, dir_h, но при функционировании он все равно использует значения, заложенные еще в button_c. Я знаю, что я делаю неправильно - но как сделать правильно? Возможно, я вообще неправильно поставил вопрос и "переопределение переменной родительского класса" - это бред, но как тогда реализовать то, чтобы методы, описанные еще в родительском классе, реализовывались с переменными, измененными в классе дочернем?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#pragma once
 
#include <SFML/Graphics.hpp>
#include <string>
#include <iostream>
 
using namespace sf;
using namespace std;
 
class button_c : public Drawable
{
public:
 
    button_c (int a, int b)
    {
        image.loadFromFile(dir);
        image.createMaskFromColor(Color(255, 255, 255));
        texture.loadFromImage(image);
        sprite.setTexture(texture);
        sprite.setPosition(a, b);
 
        image_h.loadFromFile(dir_h);
        image_h.createMaskFromColor(Color(255, 255, 255));
        texture_h.loadFromImage(image);
        sprite_h.setTexture(texture);
        sprite_h.setPosition(a, b);
 
        x = a; y = b; 
    }
 
    ~button_c ()
    {
 
    }
 
    void update(RenderWindow &window)
    {
        m_update(window);
    }
 
protected:
 
    int x, y;
    int w = 200, h = 50;
 
    string dir = "images/b.png", dir_h = "images/bh.png";
 
    Image image, image_h;
    Texture texture, texture_h;
    Sprite sprite, sprite_h;
 
    Vector2i mouse_coords;
 
    bool lighted;
 
    void m_update(RenderWindow &window)
    {
        mouse_coords = Mouse::getPosition(window);
        mouse_coords.x -= x;
        mouse_coords.y -= y;
        cout << w << h << endl;
        if (mouse_coords.x > 0 && mouse_coords.x < w && mouse_coords.y > 0 && mouse_coords.y < h)
        {
            lighted = true;
        }
        else 
        { 
            lighted = false; 
        }
    }
 
    virtual void draw(RenderTarget& target, RenderStates states) const
    {
        if (lighted)
        target.draw(sprite_h, states);
        else
        target.draw(sprite, states);
    }
 
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#pragma once
 
#include <SFML/Graphics.hpp>
#include <string>
#include "button.h"
 
using namespace sf;
using namespace std;
 
class about_c: public button_c
{
public:
 
    about_c(int a, int b):button_c(a, b) {};
 
    ~about_c() {};
 
private:
 
    int w = 250;
    int h = 100;
 
    string dir = "images/button.png"; string dir_h = "images/button3.png";
 
};
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.10.2016, 21:20
Ответы с готовыми решениями:

Изменения названия переменной класса родителя в классе наследнике
Изменения названия переменной класса родителя в классе наследнике Возможно ли это, если да то как?...

Наследование. Переопределение метода родителя
не работает конструкция вида: class AllFigureData { protected: int id; int x; int y;...

Правда, что указатель класса-наследника не может указывать на объект класса-родителя?
Доброго времени суток! Пример кода ниже. Правда ли , что указатель класса-наследника не может...

Инициализация членов дочернего класса членами класса родителя
Есть уже созданный класс-родитель A. Как эффективно инициализировать дочерний класс B членами...

3
Эксперт С++
8561 / 4135 / 910
Регистрация: 15.11.2014
Сообщений: 9,336
22.10.2016, 21:31 2
Цитата Сообщение от Pochkin Посмотреть сообщение
Я знаю, что я делаю неправильно
огааа

Цитата Сообщение от Pochkin Посмотреть сообщение
как тогда реализовать то, чтобы методы, описанные еще в родительском классе, реализовывались с переменными, измененными в классе дочернем?
у вас есть базовый класс.
в этом базовом классе есть public и protection секции.
где описаны публичный интерфейс,
и интерфейс специально для наследников.

и это все, что вы можете использовать.

если среди этих функций нет такой,
которая подкрутит гайки как вам нужно,
ну значит нельзя ничего сделать.
так захотел сделать разработчик базового класса.
0
15261 / 8228 / 1993
Регистрация: 30.01.2014
Сообщений: 14,010
22.10.2016, 21:34 3
Лучший ответ Сообщение было отмечено Pochkin как решение

Решение

Pochkin,
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
class button_c 
    : public Drawable
{
public:
    button_c(int a, int b, int w = 200, int h = 50) 
        : m_x(a), m_y(b)
        , m_w(w), m_h(h)
    {
        //............
    }
 
    //...................
    int x() const { return m_x; }
    int y() const { return m_y; }
        
    int width() const { return m_w; }
    int height() const { return m_h; }
        
private:
    int m_x, m_y;
    int m_w, m_h;
};
 
class about_c
    : public button_c
{
public:
    about_c(int a, int b)
        : button_c(a, b, 250, 100) 
    { }
 
    //...................
        
private:
    //................... 
};
1
nd2
3419 / 2799 / 1251
Регистрация: 29.01.2016
Сообщений: 9,426
22.10.2016, 22:10 4
Цитата Сообщение от Pochkin Посмотреть сообщение
но как сделать правильно?
Можешь определить в about_c метод, внутри которого будет доступ к protected-данным класса button_c, и там задавать значения этим данным.
DrOffset, привёл пример для private-данных, для protected-данных можно и через метод производного класса получить доступ.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.10.2016, 22:10

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

Задачка для новичков #2: вывести в методе класса-родителя значение данных-членов из дочернего класса
Вдохновленный соседней темой тоже решил задать свой вопрос таким же начинающим программистам как и...

Переопределение класса
Пытаюсь создать приоритетную очередь на основе кучи, но не выходит. Не понимаю почему, выскакивает...

Не работатет метод из класса родителя
Доброго вемени суток. Есть задача - создать библиотеку классов игровых персонажей на C++. Здоровье...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.