Как вызвать функцию из класса c
Пользователь
Регистрация: 28.03.2011
Сообщений: 32
Как вызвать функцию из класса ?
Есть класс, а в нем функция
class test < public: int sh(); >; sh()
А как теперь его вызвать ?
test::sh();
не прокатывает, вылазит ошибка
| Use . or -> to call ‘test::sh() |
, однако при попытке test.sh(); или test->sh(); тоже не компилируется
| Silly Student |
| Посмотреть профиль |
| Найти ещё сообщения от Silly Student |
Форумчанин
Регистрация: 07.08.2011
Сообщений: 576
вот так попробуй
int test::ch() < //тут тело метода >
Пользователь
Регистрация: 25.05.2011
Сообщений: 89
class test < public: int sh(); >; int test::sh() < ShowMessage("sh"); return 0; >void main()
Последний раз редактировалось _Alerter_; 13.10.2011 в 20:09 .
| Похожие темы | ||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение |
| Как вызвать функцию из функции ? | PheonixS | JavaScript, Ajax | 3 | 16.12.2010 05:35 |
| Как вызвать функцию из юнита? | Des | Общие вопросы Delphi | 5 | 06.11.2010 12:47 |
| Вызвать функцию с известной сигнатурой для неизвестного класса. Интерфейс | Ferrum26 | Общие вопросы Delphi | 4 | 22.07.2010 14:26 |
| Как вызвать метод из другого класса в C# | KobolD | Помощь студентам | 6 | 25.06.2010 14:12 |
| Как вызвать функцию? | blackstersl | Общие вопросы Delphi | 10 | 07.06.2009 19:22 |
8.15. Вызов виртуальной функции родительского класса
Требуется вызвать функцию родительского класса, но она переопределена в производном классе, так что обычный синтаксис p->method() не дает нужного результата.
Укажите полное имя вызываемого метода, включая имя родительского или базового класса (если есть только два класса, например). (См. пример 8.16.)
Пример 8.16. Вызов определенной версии виртуальной функции
using namespace std;
virtual void foo()
class Derived : public Base
virtual void foo()
Derived* p = new Derived();
p->foo(); // Вызов версии производного класса
p->Base::foo(); // Вызов версии базового класса
Регулярное использование переопределения полиморфных возможностей C++ является плохой идеей, но иногда это требуется сделать. Как и в случае с большинством других методик С++, это по большей части вопрос синтаксиса. Когда требуется вызвать определенную версию виртуальной функции базового класса, просто укажите ее имя после имени этого класса, как это сделано в примере 8.16.
Здесь будет вызвана версия foo, определенная в Base, а не та, которая определена в каком-то из подклассов Base, на который указывает p.
Читайте также
Пример кода родительского процесса
Пример кода родительского процесса #include <stdio.h>#include <stdlib.h>#include <string.h>#include <process.h>#include <sys/neutrino.h>#include <sys/netmgr.h>#include <spawn.h>#include <errno.h>#include <unistd.h>#include <sys/wait.h>#include <locale.h>int main(int argc, char **argv) < int nid; // Дескриптор удаленного узла int PChanid; //
Многократный вызов функции connect для сокета UDP
Многократный вызов функции connect для сокета UDP Процесс с присоединенным сокетом UDP может снова вызвать функцию connect Для этого сокета, чтобы:? задать новый IP-адрес и порт;? отсоединить сокет.Первый случай, задание нового собеседника для присоединенного сокета UDP, отличается
Глава 12 Настройка родительского контроля
Глава 12 Настройка родительского контроля 12.1. Ограничения по времени12.2. Игры12.3. Разрешение и блокировка конкретных программВпервые с понятием родительского контроля пользователи столкнулись в операционной системе Windows Vista. Задумка достаточно интересная: вы можете
R.5.2.2 Вызов функции
R.5.2.2 Вызов функции Вызов функции является постфиксным выражением, за которым следует, возможно пустой, список выражений в скобках, разделенных запятой. Эти выражения образуют фактические параметры функции. Постфиксное выражение должно иметь тип «функция, возвращающая T»,
R.13.4.4 Вызов функции
R.13.4.4 Вызов функции Вызов функции есть конструкция вида:первичное-выражение ( список-выражений opt )Она считается бинарной операцией, в которой первичное-выражение представляет первый операнд, а список-выражений (возможно пустой), — второй операнд. Именем, задающим функцию,
Правило 23: Предпочитайте функциям-членам функции, не являющиеся ни членами, ни друзьями класса
Правило 23: Предпочитайте функциям-членам функции, не являющиеся ни членами, ни друзьями класса Возьмем класс для представления Web-браузера. В числе прочих такой класс может предлагать функции, который очищают кэш загруженных элементов, очищают историю посещенных URL и
Вызов функции с аргументом: фактические аргументы
Вызов функции с аргументом: фактические аргументы Задача в данном случае состоит в том, чтобы присвоить некоторую величину формальному аргументу number. После того как эта переменная получит свое значение, программа сможет выполнить свою задачу. Мы присваиваем
5.4.2. Взаимодействие родительского и дочернего процессов
5.4.2. Взаимодействие родительского и дочернего процессов Функция pipe() создает два файловых дескриптора, которые действительны только в текущем процессе и его потомках. Эти дескрипторы нельзя передать постороннему процессу. Дочерний процесс получает копии дескрипторов
Вызов функции
Вызов функции Вызов функции передает управление и фактические аргументы (если они есть) заданной функции. Синтаксически вызов функции имеет следующий вид:<выражение>([<список выражений>])<Выражение> вычисляется, и его результат интерпретируется как адрес
Вызов функции с переменным числом аргументов
Вызов функции с переменным числом аргументов Для вызова функции с переменным числом аргументов не требуется никаких специальных действий: в вызове функции просто задается то число аргументов, которое нужно. В предварительном объявлении (если оно есть) переменное число
13.3. Функции-члены класса
13.3. Функции-члены класса Функции-члены реализуют набор операций, применимых к объектам класса. Например, для Screen такой набор состоит из следующих объявленных в нем функций-членов:class Screen char get() < return _screen[_cursor]; >char get( int, int );void move( int, int );bool checkRange( int, int );int
17.5.3. Статический вызов виртуальной функции
17.5.3. Статический вызов виртуальной функции Вызывая виртуальную функцию с помощью оператора разрешения области видимости класса, мы отменяем механизм виртуализации и разрешаем вызов статически, на этапе компиляции. Предположим, что мы определили виртуальную функцию isA()
6.8 Вызов Функции
6.8 Вызов Функции Вызов функции, то есть запись выражение(список_выражний), можно проинтерпретировать как бинарную операцию, и операцию вызова можно перегружать так же, как и другие оперции. Список параметров функции operator() вычисляется и прверяется в соответствие с
Компоненты класса и АТД функции
Компоненты класса и АТД функции Для понимания отношений между утверждениями и АТД необходимо, прежде всего, установить отношение между компонентами класса и их двойниками — АТД функциями. В свете прежних обсуждений функции подразделяются на три категории: создатели,
Практическая работа 60. Настройка родительского контроля
Практическая работа 60. Настройка родительского контроля Задание. Настроить ограничения при использовании компьютера детьми и проверить их работу. ВНИМАНИЕ Это задание можно выполнить только в версиях Windows Vista Home Basic, Home Premium и Ultimate и только при использовании учетной
Как вызвать функцию класса из переменной?
Подскажите пожалуйста, каким образом, можно в C++ сохранить функцию класса в переменную, и затем вызвать её из основного тела программы? Если делать всё просто в main, без разделение на классы, то всё работает. Я же хочу сделать именно в разных файлах.
Как бы я не пытался придумать, у меня выходит ошибка:
non-standard syntax; use '&' to create a pointer to member
Пробую как-то так:
//Class.h: class Class < public: typedef void(Class::*funcType)(); funcType func; void test(); >; //Class.cpp: #include "Class.h" #include Class::Class() < func = Class::test; >void Class::test() < std::cout //Program.cpp #include #include "Class.h" void mian()
Отслеживать
задан 5 июн 2019 в 11:21
3 1 1 бронзовый знак
К тому же указатель на метод немного отличается от указателя на функцию. Ему нужен объект, к которому этот указатель на метод мы можем применить. И тогда получится такая штука (c.*c.func)();
5 июн 2019 в 11:49
Пробовал ставить * и & в различных комбинациях, это не изменяло ошибку. Что-то не пойму, как использовать (c.*c.func)
Как правильно вызвать функцию другого класса?

Очень не советую использовать callback-и (да и большую часть других плюшек С++ последних стандартов) раньше, чем научитесь обходиться без них. Передавайте объекты, используйте более традиционные методы. Когда сможете написать все без callback-ов и потратите на отладку этого кода меньше, чем на написание - тогда можно смело с ними знакомиться и использовать. Начнете с них - превратите свой код в минное поле и не сможете понять, где рвануло и почему.
Решения вопроса 2

Это называется функция обратного вызова, или Сallback
Существует достаточно много способов для реализации коллбеков, но самым современным решением в C++ является функтор.
Функтор, или функциональный объект - это просто класс с перезагруженным оператором () . Стандартная библиотека уже включает в себя интерфейс для удобного создания и использования функторов - std::function
#include void deleteAllItems(int); // foo; //
Ответ написан более трёх лет назад
Нравится 2 2 комментария
Евгений Шатунов @MarkusD Куратор тега C++
Pavel Tananykhin , это ответ на твой вопрос. 🙂
Так же советую использовать библиотеку libsigc++, которая по своей сути является отщеплением и развитием Boost signals. Она простая в освоении, удобная в использовании и быстрая в работе.
libsigc.sourceforge.net/index.shtml
https://developer.gnome.org/libsigc++-tutorial/stable/
Евгений Шатунов @MarkusD Куратор тега C++
А. кстати. Еще неплохо будет добавить пример использования функторов для вызова this-call функций.
Пример использования.
cpp.sh/2fuxm
"I'm here to consult you" © Dogbert
В другом классе я создаю указатель для этой функции.
void(InventoryContainer::*fnDelete)(unsigned int);
Но при попытке вызвать эту функцию,
this->fnDelete(this->IFrom);
студия показывает мне что this в данном случае не корректен.
1. Как правильно вызвать функцию?
Правильно показывает. fnDelete должен быть вызван для объекта класса InventoryContainer, и синтаксис разыменования указателя на функцию-член малость другой:
InventoryContainer *that; . (that->*fnDelete)(IFrom);
2. Где то на StackOverflow видел,что для вызова такой функции нужен ещё объект.Не лучше ли тогда просто передать ссылку на объект и через него и вызвать функцию?
Смысл указателя на функцию-член в том, что он даёт возможность вызывать любую функцию с такой сигнатурой в данном объекте. Т.е. для динамического выбора:
class A < public: void f1(); void f2(); >; void (A::*f)(); if (. ) f = &A::f1; else f = &A::f2; . A *pa; . (pa->*f)(); // вызывает f1 или f2