Форум программистов, компьютерный форум CyberForum.ru

Инкапсуляция, ссылка на функцию - C++

Восстановить пароль Регистрация
 
AC-93
13 / 13 / 0
Регистрация: 27.01.2010
Сообщений: 150
09.10.2011, 18:19     Инкапсуляция, ссылка на функцию #1
Делаю задание по инкапсуляции, реализовать 3 вида списков в 1 программе, причем списки как подкл модули и снаружи только выбор типа при создании и функции работы.
есть функция
int (* GetData)(ListNode *);
я хочу ее определить чтобы она делала (int)((ListOC *)(ListNode *a)->data)
причем выбор типа списка контролируется кейсами при создании. Т.е. просто писать это в функции не могу, нужно чтобы по вызову GetData(a) сразу на а кастовался определенный тип и тд.
Не могу сообразить как сделать это.
Нужно срочно, заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.10.2011, 18:19     Инкапсуляция, ссылка на функцию
Посмотрите здесь:

C++ Ссылка на функцию класса (не указатель)
C++ Не работает ссылка на функцию.
Инкапсуляция. C++
C++ Инкапсуляция в ООП и C++
C++ инкапсуляция
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Сыроежка
Заблокирован
09.10.2011, 19:39     Инкапсуляция, ссылка на функцию #2
Цитата Сообщение от AC-93 Посмотреть сообщение
Делаю задание по инкапсуляции, реализовать 3 вида списков в 1 программе, причем списки как подкл модули и снаружи только выбор типа при создании и функции работы.
есть функция
int (* GetData)(ListNode *);
я хочу ее определить чтобы она делала (int)((ListOC *)(ListNode *a)->data)
причем выбор типа списка контролируется кейсами при создании. Т.е. просто писать это в функции не могу, нужно чтобы по вызову GetData(a) сразу на а кастовался определенный тип и тд.
Не могу сообразить как сделать это.
Нужно срочно, заранее спасибо.
Создайте базовый абстрактный класс, а от него три производных класса для ваших списков. В базовом классе задайте интерфейс для всех трех типов ваших списков. И работайте с различными списками через указатель на базовый класс.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
09.10.2011, 19:46     Инкапсуляция, ссылка на функцию #3
тут судя по всему вариант полиморфизма на кейсах, те ручной реализации
Сыроежка
Заблокирован
09.10.2011, 19:49     Инкапсуляция, ссылка на функцию #4
Цитата Сообщение от alex_x_x Посмотреть сообщение
тут судя по всему вариант полиморфизма на кейсах, те ручной реализации
Как я понял, то "выбор типа списка контролируется кейсами при создании", то есть я так понимаю, что при создании выбирается тип, а не при вызове метода.
AC-93
13 / 13 / 0
Регистрация: 27.01.2010
Сообщений: 150
09.10.2011, 20:18  [ТС]     Инкапсуляция, ссылка на функцию #5
Люди, это мое первое задание по ООП.
Итак есть структура
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct List
{
    void * first;
    //куча указателей на нужные функции 
    int (* Getdata)(ListNode *);
 
    ListNode *(* AddNode)(void **, int );
    void (*RemoveNode)(void *, ListNode * );
 
    ListNode *(* GetFirstNode)(void *);
    ListNode *(* GetNextNode)(void *, ListNode * );
    ListNode *(* GetPrevNode)(void *, ListNode * );
    void (* KillNode)(ListNode * );
};
нужно чтобы после вызова List * = createlist(1) ; создалась структура с которой я бы обращался по L->addnode(5) и тд.

Добавлено через 1 минуту
Если я создам класс, то смогу все это быстро переопределить?
Копать в сторону полиморфизма? В *.c файле такое скомпилится?
Сыроежка
Заблокирован
09.10.2011, 20:21     Инкапсуляция, ссылка на функцию #6
Цитата Сообщение от AC-93 Посмотреть сообщение
Добавлено через 1 минуту
Если я создам класс, то смогу все это быстро переопределить?
Копать в сторону полиморфизма? В *.c файле такое скомпилится?
Не важно, какое у вас расширение файла, важно, как вы файл компилируете. Но если вы компилируете как С-программу, то у вас и исходный код не будет компилироваться, так как в С нельзя объявлять функции внутри структуры.
AC-93
13 / 13 / 0
Регистрация: 27.01.2010
Сообщений: 150
09.10.2011, 20:35  [ТС]     Инкапсуляция, ссылка на функцию #7
Пожалуйста скажите где прочитать о магии с функциями, переопределением их, указателями на функции и о выражениях типа func *a(c) = b(const,c);
Сыроежка
Заблокирован
09.10.2011, 20:48     Инкапсуляция, ссылка на функцию #8
Цитата Сообщение от AC-93 Посмотреть сообщение
Пожалуйста скажите где прочитать о магии с функциями, переопределением их, указателями на функции и о выражениях типа func *a(c) = b(const,c);
В книгах по С++. Термин "переопределение" обычно относится к виртуальным функциям, когда в производном классе переопределяется виртуальная функция базового класса.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.10.2011, 21:10     Инкапсуляция, ссылка на функцию
Еще ссылки по теме:

C++ Что передаётся в функцию, если в прототипе ссылка?
C++ Наследование и инкапсуляция в C++
Thread ссылка на удаленную функцию о_О C++

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

Или воспользуйтесь поиском по форуму:
AC-93
13 / 13 / 0
Регистрация: 27.01.2010
Сообщений: 150
09.10.2011, 21:10  [ТС]     Инкапсуляция, ссылка на функцию #9
ну а в принцепи можно сделать чтобы вызвав функцию с одними параметрами, мы попали в функцию с другими параметрами, где недостающие параметры определены при присваивании.
т.е. объявлен указатель на функцию с 3 параметрами. Присваиваем этот указатель указателю на функцию с 5 параметрами, где 2 недостающих определяем при присваивании. Т.е. изменяемых так же 3 и остается.


понимаю что не понятно написал(
Yandex
Объявления
09.10.2011, 21:10     Инкапсуляция, ссылка на функцию
Ответ Создать тему
Опции темы

Текущее время: 19:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru