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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
AC-93
16 / 16 / 0
Регистрация: 27.01.2010
Сообщений: 150
#1

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

09.10.2011, 18:19. Просмотров 518. Ответов 8
Метки нет (Все метки)

Делаю задание по инкапсуляции, реализовать 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++
Пожалуйста,Помогите найти ошибку.Мне нужно сделать ссылку на функцию, которая является функцией класса interface. С этой ссылкой на функцию...

Ссылка на функцию класса (не указатель) - C++
можно ли делать ссылки на функции класса? например класс: class cdPolygon2D : public draw { public: ...

Thread ссылка на удаленную функцию о_О - C++
Добрый день Начал росбираться с потоками на C++ и после 5 минут наткнулся на проблемку. Имеею клас Writing_Class ничего...

Что передаётся в функцию, если в прототипе ссылка? - C++
void swap(int &, int &); int main() { /* ... */ swap(x,y); /* ... */ } void swap(int &rx, int...

инкапсуляция - C++
Возможно ли определение пользовательского типа, чтобы им можно было пользоваться только внутри класса? На например class aaaa { ...

Инкапсуляция. - 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
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
09.10.2011, 19:46     Инкапсуляция, ссылка на функцию #3
тут судя по всему вариант полиморфизма на кейсах, те ручной реализации
Сыроежка
Заблокирован
09.10.2011, 19:49     Инкапсуляция, ссылка на функцию #4
Цитата Сообщение от alex_x_x Посмотреть сообщение
тут судя по всему вариант полиморфизма на кейсах, те ручной реализации
Как я понял, то "выбор типа списка контролируется кейсами при создании", то есть я так понимаю, что при создании выбирается тип, а не при вызове метода.
AC-93
16 / 16 / 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
16 / 16 / 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++
Вы используете в классе геттеры и сеттеры (функции). Отделяйте спецификацию от реализации (инкапсуция в каком-то роде). Т.е. header file...

wxDev-C++ и инкапсуляция - C++
Всем привет. Учусь по книжке Дейтелов, дошел до классов. Авторы пропагандируют методику сокрытия ненужных данных, то есть делать 3 файла:...

инкапсуляция методов - C++
можно ли в С ++ инкапсулировать методы? чтобы один метод был доступен только после вызова другого

Инкапсуляция строк - C++
Приветствую! Как сделать инкапсуляцию строк? Например: Допустим, для целых чисел можно использовать: enum class Colors { ...

Инкапсуляция. классы - C++
Добрый вечер. История такая: Разбирался с инкапсуляцией классов. Но не могу сформулировать точно, кратко и ёмко как всё происходит. В целом...


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

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


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

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