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);
///-----Прикрепленные данные, обрабатываются указаными выше функциями
};
Доступ к элементам разных классов
Суть в следующем - есть связанный список элементов - кнопки, чекбоксы и т.д. У каждого класса есть общие функции - рисовать объект, послать клик и т.д. Так вот объекты разных классов нужно объеденить в один связанный список. Понятное дело, что сделать это с элементами разных классов в связанном списке будет затруднителен - каждый раз узнавать в какому типу привести указатель void*, чтоб вызвать функцию Draw(). Поэтому нужно организовать доступ к элементам через какой-то шаблон, чтоб приводить объекты типа BButton к BObject, функции Draw() всё равно и там и там имеют одинаковый прототип, хотя и разную "начинку".
Код:
...пробовал вот так - ругается на левый адрес. Честно говоря я считал, что функция в классе хранитья точно так же как и ссылка на функцию в структуре.
Ты про наследование, базовые и производные классы слышал?
А если я унаследую методы BObject, то не перекроет ли функция Draw() одноименную из класса BButton? Ведь названия одинаковые, а устроены по-разному..
Читать, только читать, очень сильно закалдован... И читать желательно что нить из классики - Страуступ, Липпман, Барбара Му... далее немного Алксандреску и Саттера. Давно уже пора создать топ с ссылками на книги для новичков.
По поводу вопроса можно глянуть Страуструпа "Неоднородные списки".
Зодачка решена...
Стандарт языка претерпел большие изменения с момента изначального "изобретения" С++ и первых его доработок, так что я бы рекомендовал читать что-нибудь посвежее...
Возможно, я ошибаюсь
ну.. не буду никаго убеждать.
Пробежался глазами по материалам в указанной ссылке. Видимо, БС держит все под контролем и в актуальном состоянии. Но дело-то в том, что в Сети весьма распространены старые материалы, особенно это касается переведенных на русский язык материалов...