Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
Каждому свое
 Аватар для Bretbas
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614

Как передать функции через метод класса

09.08.2013, 22:25. Показов 1508. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер всем!
Столкнулся с проблемкой

К примеру у меня есть 3 функции.Я хочу в 4 функцию дать массив названий этих 3 функций,чтобы распределять в каких моментах их использовать.Ну вот как-то так объяснил)

К примеру у меня есть класс Меню в консоли.Я методом задаю список меню самого.Отдельно пишу функции,которые будут выполняться по нужному списку меню,и в еще одном методом,передаю массивом названия на эти функции,чтобы их использовать по заданному списку

К примеру:
задал методом option() список:
Start
Option
Exit

То есть у меня 3 элемента списка меню.

За тем я пишу отдельно функции для каждого элемента списка меню - функция start() функция option() функция exit().

А теперь я хочу через метод класса передать все эти названия функций в объект,и чтобы они выполнять для нужного списка меню.Как реализовать не подскажете?Или в какую сторону двигаться?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.08.2013, 22:25
Ответы с готовыми решениями:

Как передать указатель на функцию через метод класса ?
typedef void (*FuncCallback)(float* flValue); Пробовал по всякому и ни как: Class.CallFunc // error C3867: CClass::CallFunc :...

Как передать метод класса в качестве параметра функции
Это типа "бот", он работает ("шагает" по заданному полю) #include "stdafx.h" #include <iostream> #include <time.h> ...

Как в аргумент функции передать указатель на метод класса?
Как в аргумент функции передать указатель на метод класса? Метод в классе у меня статический,все равно не получается(невозможно...

2
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
10.08.2013, 10:31
Почитайте про указатели на функции.
0
433 / 368 / 149
Регистрация: 06.08.2012
Сообщений: 961
10.08.2013, 14:18
Лучший ответ Сообщение было отмечено Bretbas как решение

Решение

как то так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
 
typedef void (*pFunction)();
 
inline void Start()  { std::cout << "Start() \n";  }
inline void Option() { std::cout << "Option() \n"; }
inline void Exit()   { std::cout << "Exit() \n";   }
 
void SomeFunc(pFunction*);
 
int main(int)
{
    pFunction pFun [3] = { Start, Option, Exit };
 
    SomeFunc(pFun);
 
    return 0;
}
 
void SomeFunc(pFunction* pF)
{
    pF[0](); // Start()
    pF[1](); // Option()
    pF[2](); // Exit()
}
или так :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <map>
#include <string>
#include <array>
 
inline void Start()  { std::cout << "Start run.  \n"; }
inline void Option() { std::cout << "Option run. \n"; }
inline void Exit()   { std::cout << "Exit run.   \n"; }
 
void SomeFunc(const std::array<std::string, 0x3>&, std::map<std::string, void (*)()>&);
 
int main(int)
{
    std::array<std::string, 0x3> aTitle = { "Start", "Option", "Exit" };
    std::map<std::string, void (*)()> pFun;
    
    pFun.insert(std::make_pair(aTitle[0], Start));
    pFun.insert(std::make_pair(aTitle[1], Option));
    pFun.insert(std::make_pair(aTitle[2], Exit));
 
    SomeFunc(aTitle, pFun);
 
    system("PAUSE");
    return 0;
}
 
void SomeFunc(const std::array<std::string, 0x3>& title, std::map<std::string, void (*)()>& pFun)
{
    std::cout << title[0] << " - "; pFun[title[0]]();
    std::cout << title[1] << " - "; pFun[title[1]]();
    std::cout << title[2] << " - "; pFun[title[2]]();
}

Не по теме:

P.S. вместо SomeFunc - то, что тебе нужно

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.08.2013, 14:18
Помогаю со студенческими работами здесь

Как передать в метод класса Menu указатель на метод дочернего класса?
Как передать в метод базового класса указатель на метод дочернего: class Menu() { protected: setCallback(*********); //...

Передать метод класса как параметр
Есть класс A, у него есть метод B, как метод B подсунуть в конструктор std::thread? Что-то типа такого class A { void B{ ... } ...

Как корректно передать в метод шаблонного класса объект шаблонного класса в качестве параметра?
header.h template &lt;class T&gt; class MyVector { public: void swap(MyVector&lt;T&gt;Vector); } template &lt;class T&gt; void...

Как передать в метод класса ссылку на экземпляр
Есть класс class Class{ ... } Как передать в метод экземплер класса из которого вызывается этот метод? Пробывал так: class Class{ ...

Как передать нестатическое поле в статический метод класса?
есть статическая фукция static LRESULT CALLBACK WndProc ( HWND,UINT,WPARAM,LPARAM); в ней нужно использоавть поля класса, вопрос -...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru