Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Доступ к элементам разных классов

1.9K
27 июня 2007 года
0xf001
96 / / 24.05.2005
Помогите с такой задачей пожалуйста!
Суть в следующем - есть связанный список элементов - кнопки, чекбоксы и т.д. У каждого класса есть общие функции - рисовать объект, послать клик и т.д. Так вот объекты разных классов нужно объеденить в один связанный список. Понятное дело, что сделать это с элементами разных классов в связанном списке будет затруднителен - каждый раз узнавать в какому типу привести указатель void*, чтоб вызвать функцию Draw(). Поэтому нужно организовать доступ к элементам через какой-то шаблон, чтоб приводить объекты типа BButton к BObject, функции Draw() всё равно и там и там имеют одинаковый прототип, хотя и разную "начинку".

Код:
class BObject
{
public:
    void *prew, *next;
    float X, Y;
    void (*Draw)(void);
    void (*ProcessClick)(float x, float y);
    bool (*TestSelect)(float screenx, float screeny);
    void (*GeneratePhysPolygon)(void);

};


class BButton
{
public:
    void *prew, *next;
    float X, Y;
    void Draw(void);
    void ProcessClick(float x, float y);   
    bool TestSelect(float screenx, float screeny); 
    void GeneratePhysPolygon(void);        

///-----Прикрепленные данные, обрабатываются указаными выше функциями
};


...пробовал вот так - ругается на левый адрес. Честно говоря я считал, что функция в классе хранитья точно так же как и ссылка на функцию в структуре.
394
27 июня 2007 года
MegaMozg
317 / / 18.03.2006
Ты про наследование, базовые и производные классы слышал?
1.9K
27 июня 2007 года
0xf001
96 / / 24.05.2005
Только немного..
А если я унаследую методы BObject, то не перекроет ли функция Draw() одноименную из класса BButton? Ведь названия одинаковые, а устроены по-разному..
361
27 июня 2007 года
Odissey_
661 / / 19.09.2006
Есть понятие виртуальная функция. ( И возможность обратися к коду базового класса через явное задание namespace BAseClass::foo() )
Читать, только читать, очень сильно закалдован... И читать желательно что нить из классики - Страуступ, Липпман, Барбара Му... далее немного Алксандреску и Саттера. Давно уже пора создать топ с ссылками на книги для новичков.

По поводу вопроса можно глянуть Страуструпа "Неоднородные списки".
1.9K
27 июня 2007 года
0xf001
96 / / 24.05.2005
Мммм.... У меня же валялась ПДФ-ная книга "Язык C++". Я её осенью ниасилил, так и кинул... Буду читать ("какого-то" :))) )Страуструпа.
Зодачка решена...
350
28 июня 2007 года
cheburator
589 / / 01.06.2006
Страуструп несколько устарел (хотя возможно, устарела моя информация о нем :))
Стандарт языка претерпел большие изменения с момента изначального "изобретения" С++ и первых его доработок, так что я бы рекомендовал читать что-нибудь посвежее...
Возможно, я ошибаюсь
361
28 июня 2007 года
Odissey_
661 / / 19.09.2006
ну.. не буду никаго убеждать.
http://www.research.att.com/~bs/homepage.html
350
30 июня 2007 года
cheburator
589 / / 01.06.2006
Пробежался глазами по материалам в указанной ссылке. Видимо, БС держит все под контролем и в актуальном состоянии. Но дело-то в том, что в Сети весьма распространены старые материалы, особенно это касается переведенных на русский язык материалов...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог