![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
anthony |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 25.6.2007 Где: Украина Репутация: 3 Всего: 5 |
Задача состоит в анализе возможностей использования объектно-ориентированной методологии в С.
Remark. Проект Laurent Deniau во многом ориентирован на другой подход к решению этой проблемы, однако проведение аналогий с ним или точное указание на использованные там механизмы приветствуется. Рассмотрим код С, который демонстрирует динамическое связывание функций. Данный код иллюстрирует использование возможности корректной реализации полиморфизма в С без использования каких либо расширений. Полная реализация находится в прилагаемом архиве. Извиняюсь за небрежности в написании тестовой части, однако, она создана как временный пример. В то время как описание ядра является полным и корректным.
Вопросы
PS. Анализ данного кода требует некоторого знания С и объектно-ориентированной методологии (в частности, определение цели вызова и полиморфизм). Присоединённый файл ( Кол-во скачиваний: 7 ) ![]() |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
Прикольно конечно, но мне кажется не очень эффективно по причине того, что для доступа на уровень иерархии N, нужно использовать N косвенных обращений.
То есть если у нас есть класс Shape_Circle производный от Shape, который в свою очередь является производным от Object, то для доступа к методам или свойствам Object получится цепочка shape_circle->super->super_->call(). Мне кажется можно попытаться сделать это по другому:
Это может работать потому что структура Foo состоит из тех - же элементов что и Base, плюс свои данные. Поэтому можно обращаться к Foo через указатель на Base. Каждому методу нужно передавать указатель на объект для которого происходит вызов. Это сообщение отредактировал(а) Lazin - 25.9.2007, 16:44 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |