C ++ получает доступ к функции из класса, получая функции в качестве параметра - PullRequest
0 голосов
/ 04 июня 2011

У меня есть два довольно маленьких вопроса, связанных между собой, поэтому я поставлю их на один и тот же вопрос.

Я экспериментировал с классами и пытался получить доступ к классу в другом файле, который не был 'т в классе, например.

//class 1 .cpp
void Class1::function1()//another error 
{
    function()
}


//main.cpp

void function()
{
//stuff happens
}

Есть ли способ сделать это?или мне нужно было бы добавить эту функцию в класс, чтобы заставить его работать.Кроме того, как бы вы пошли на создание функции, которая получает функцию в качестве parimetre?например, function(function2())

Я просто пытаюсь получить доступ к функции из класса, так как это облегчит мой код для последующего использования, если функция, которую я использую, не будет добавлена ​​в класс.Что касается второго вопроса, который я должен создать функцию, которая получает время и функцию в качестве аргумента.он будет ждать указанное время, затем выполнит программу

Ответы [ 3 ]

2 голосов
/ 04 июня 2011

Как получить доступ к функции в другом файле?
Зависит от типа функции, возможны случаи:

1. Доступ к функциям-членам класса в другом файле (модуль перевода):
Очевидно, что вам нужно включить заголовочный файл с объявлением класса в вашей единице перевода вызывающей стороны.

Пример кода:

//MyClass.h

class MyClass
{
    //Note that access specifier
    public:
        void doSomething()
        {
             //Do something meaningful here
        }

};

#include"MyClass.h"    //Include the header here
//Your another cpp file
int main()
{
    MyClass obj;
    obj.doSomething();
    return 0;
}

2. Доступ к бесплатным функциям в другом файле (блок перевода):

Вам не нужно включать функцию в любой класс, просто включите заголовочный файл, который объявляет функцию, а затем используйте ее в своем модуле перевода.

Пример кода:

//YourInclude.h

inline void doSomething() //See why inline in @Ben Voight's comments
{
    //Something that is interesting hopefully
}

//Your another file

#include"YourInclude.h"

int main()
{
    doSomething()
    return 0;
}

Другой случай, на который @Ben указал в комментариях, может быть:
Объявление в заголовочном файле с последующим определением в одной единице перевода

Пример кода:

//Yourinclude File
void doSomething();  //declares the function

//Your another file
include"Yourinclude"
void doSomething()   //Defines the function
{
    //Something interesting
}

int main()
{
    doSomething();
    return 0;
}

С другой стороны, грязный способ сделать это может состоять в том, чтобы просто пометить функцию как extern в вашем другом файле и использовать функцию. Не рекомендуется, но возможна следующая возможность:

Пример кода:

extern void doSomething();

int main()
{
    doSomething();
    return 0;
}

Как бы вы занялись созданием функции, которая получает функцию в качестве параметра?
Используя function pointers В двух словах, указатели на функции - это не что иное, как указатели, которые содержат адрес функций.

Пример кода:

int someFunction(int i)
{
    //some functionality
}


int (*myfunc)(int) = &someFunction;


void doSomething(myfunc *ptr)
{
    (*ptr)(10); //Calls the pointed function

}
1 голос
/ 04 июня 2011
(1) How can the `class` function be accessible ?

Вам необходимо объявить тело class в заголовочном файле и #include, где это необходимо.Например,

//class.h
class Class1 {
  public: void function1 (); // define this function in class.cpp
};

Теперь #include это в main.cpp

#include"class.h"

Вы можете использовать function1 внутри main.cpp.

(2) How to pass a function of class as parameter to another function ?

Вы можете использовать указатель на класс функций-членов .

1 голос
/ 04 июня 2011

Вам нужен прототип для функции, которую вы хотите вызвать.Тело класса содержит прототипы для всех его функций-членов, но автономные функции также могут иметь прототипы.Обычно вы организуете их в заголовочном файле, включенном как в файл, содержащий реализацию функции (чтобы компилятор мог проверить подпись), так и в любые файлы, которые хотят вызвать функцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...