Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

фича с ссылками на функцию

31K
30 января 2010 года
deadok
16 / / 15.01.2008
допустим имеется класс:

Код:
class figure {
public:
        void rectangle(void (*mult)(void)); // ф-я ссылается на ф-ю
        void draw(void);                  // некая ф-я или proc
};
 
/*
   описываю rectangle
*/

void figure::rectangle(void (*mult)(void)) {
    mult();
}
 
/*
   теперь мне хотелось бы узнать, как вызвать rectangle
   внутри какой-либо функции, которая является членом этого же класса, т.е. содержимое
   функции на которую ссылается rectangle меня не интересует
*/

void figure::draw(void) {
      rectangle(mult);           // конечно же, НЕВЕРНО, что же здесь нужно написать?
}
282
30 января 2010 года
Bard
481 / / 26.02.2006
наверно у тебя в вызове rectangle(mult) mult имеет тип не void (*)(void)
36K
30 января 2010 года
sstorm
55 / / 25.03.2009
Мне кажется, что вызов функции правильный.
Либо, как отметил Bard, mult описана неверно (не так, как это требуется в описании параметра функции rectangle)
Либо функция mult определена вне зоны видимости и не видна из void figure::draw(void)
24K
31 января 2010 года
engel65536
50 / / 17.10.2007
А в чём у вас вообще проблема? Не компилируется или компилируется, но не работает? Если допустить, что некая функция, скармливаемая методу rectangle(), описана, то здесь всё верно...
31K
31 января 2010 года
deadok
16 / / 15.01.2008
сформулирую вопрос немного по другому: как переменной присвоить функцию? как функции присвоить функцию? mult не определена. мне нужно объявить ее в классе так что бы ей можно было присвоить ф-ю на которую ссылается rectangle, a затем просто вызывать mult в каком-либо члене класса, как если бы это была обыкновенная proc или func.
1.9K
31 января 2010 года
GreenRiver
451 / / 20.07.2008
Описание класса:
Код:
class figure {
private:
    void (*mult)(); // указатель на функцию

public:
    // Конструктор
    figure(void (*f)(void))
    {
        // Запоминаем указатель на переданную функцию
        mult = f;
    }

    void rectangle()
    {
        // Используем
        mult();
    }

    void draw()
    {
        rectangle();
    }
};


Использование:
 
Код:
void print()
{
    printf("test...");
}

int main(int argc, char *argv[])
{
    figure x(print);
    x.draw();
}
31K
31 января 2010 года
deadok
16 / / 15.01.2008
GreenRiver большое спасибо.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог