0 / 0 / 0
Регистрация: 15.04.2020
Сообщений: 22
|
||||||
1 | ||||||
Не получается использовать указатель на метод класса26.04.2020, 22:16. Показов 561. Ответов 9
Метки нет (Все метки)
Добрый вечер!
Пишу код по учебе, хотел использовать указатель на функцию, чтобы указывал на метод класса getArea и на подобные, которые планирую добавить в дальнейшем. Наверняка простая ошибка по синтаксису, помогите, пожалуйста. Попытка создания указателя на функцию и его использования - в самом низу кода.
0
|
26.04.2020, 22:16 | |
Ответы с готовыми решениями:
9
Как передать в метод класса Menu указатель на метод дочернего класса? Функция, получающая указатель на обычную функцию, получает указатель на метод класса Указатель на метод класса в качестве аргумента метода класса При перегрузке оператора для класса не получается использовать имя переменной такое же, как в описании класса |
7787 / 6555 / 2983
Регистрация: 14.04.2014
Сообщений: 28,633
|
|
26.04.2020, 23:32 | 2 |
Зачем тебе это понадобилось? Усложняешь на ровном месте.
Указатель на функцию-член класса
0
|
Комп_Оратор)
|
|
26.04.2020, 23:43 | 3 |
kir0116, непонятно что вы хотите сделать. Виртуальный метод можно вызвать на указателе на объект базового класса Shape. Несмотря на то что не бывает таких объектов, бывают на них указатели. И ставить их можно на объекты наследников. То есть, логика ветвления тут реализуется иначе)
1
|
0 / 0 / 0
Регистрация: 15.04.2020
Сообщений: 22
|
|
27.04.2020, 00:07 [ТС] | 4 |
Хотелось реализовать возможность в зависимости от введенного в input числа запускать определенный метод (например, 1- нахождение площади, 2 - какой-нибудь длины и т.д.). То есть смысл глобально никакой, хотелось в качестве упражнения просто отработать использование указателя на функцию.
И теперь интересно было бы понять, в чем тут ошибка, так как в случае с обычными функциями, вне каких-либо классов, это должно было бы сработать)
0
|
7787 / 6555 / 2983
Регистрация: 14.04.2014
Сообщений: 28,633
|
|
27.04.2020, 00:15 | 5 |
Я тебе дал ссылку. Там показано, как это записывается. Но польза в чём для твоей задачи?
0
|
0 / 0 / 0
Регистрация: 15.04.2020
Сообщений: 22
|
|
27.04.2020, 00:28 [ТС] | 6 |
Польза - вот, как я выше написал. Глобально никакой пользы нет, вообще, хочется просто пощупать указатели на функции.
через typedef, как в той ветке по ссылке указано, я еще до этого пробовал мне интересно, почему так, как в вышеприложенном варианте у меня, не прокатывает
0
|
7787 / 6555 / 2983
Регистрация: 14.04.2014
Сообщений: 28,633
|
|
27.04.2020, 00:40 | 7 |
Потому что для функции-члена особый способ записи, а ты берёшь как для простой.
1
|
Комп_Оратор)
|
|
27.04.2020, 00:56 | 8 |
kir0116, в случаях достаточно специфических, специфичность ситуации требует инструментария. Это значит, что взять уникльный иструмент и попытаться примитивными средствами сгенерировать ситуацию для применения, это похоже на попытку логарифмической линейкой проковырять дырку в промокашке.
Конкретно о указателях на функции лучше почитать. И обратите внимание на случаи, когда, это применяется. Если не поймёте, - ройте задачи.
0
|
Вездепух
11691 / 6370 / 1723
Регистрация: 18.10.2014
Сообщений: 16,053
|
||||||
27.04.2020, 01:11 | 9 | |||||
Это не указатель на метод класса. Это указатель на обычную функцию. Указатель на обычную функцию не может указывать на [нестатический] метод класса.
Правильно:
Это совершенно правильная логика. Именно и только для этого и предназначены указатели на члены классов. При желании, вы можете организовать такие указатели в массив, чтобы выполнять выбор метода не через switсh , а просто через индекс массива. Разумеется, такой указатель может указывать только на методы соответствующего типа.И не обращайте внимание на попытки некоторых индивидуумов напускать дымовую завесу из потока малосвязанных друг с другом слов: вас (точнее - нас всех) просто пытаются троллить
1
|
Комп_Оратор)
|
||||||
27.04.2020, 09:50 | 10 | |||||
kir0116, вызов метода класса, в общем случае, требует экземпляра класса. Та логика, о которой вы говорите - попытка сделать запуск независимым от встроенного инструментария.
То есть, язык предоставляет вам возможность выбора метода по имени. Для того, чтобы отказаться от этого нужно иметь вескую причину. Это может быть например запуск в виде обратного вызова. Допустим вы хотите создать механизм, который запускает разные методы, разных объектов в другом контексте, а логика выбора находится на вызывающей стороне. Тогда можно передать объект и указатель на метод класса, а запуск будет выполнен на той стороне. Привязка метода к объекту может быть выполнена по разному. Но важно то, что указатель на метод класса объявляется и используется иначе чем указатель на функцию. Это не просто разные синтаксисы. Указатель на метод - член, это другой тип, чем указатель на функцию. И это не самостоятельный тип. Я повторю. Ваш код показывает существенно недостаточную подготовленность к вопросу. Тут нет ни какого троллинга. Написать вам пример как по свичу выдернуть метод схожий по сигнатуре? В сетке этого полно. Синтаксис ужасен (мнение не только моё). Почитайте и попробуйте запустить. Может и вопрос отпадёт. А может появятся новые. Нюансов там достаточно. Добавлено через 11 минут Еще непонятно, почему знакомясь с новой концепцией (непростой) вы сразу выбирает сложный контекст тестирования в виде виртуальных методов. Не лучше ли с самого простого начать? Это тоже не троллинг. Вот я нашёл в старых примерах случай и с виртуальными методами. О чём говорилось не помню, но можете взглянуть:
1
|
27.04.2020, 09:50 | |
27.04.2020, 09:50 | |
Помогаю со студенческими работами здесь
10
Указатель на метод класса! Указатель на метод класса Указатель на метод класса Указатель на метод класса Указатель на метод класса Указатель на метод класса Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |