Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Cynacyn
33 / 33 / 0
Регистрация: 02.05.2013
Сообщений: 109
#1

Есть ли альтернатива указателю на функцию - C++

13.06.2013, 13:04. Просмотров 323. Ответов 4
Метки нет (Все метки)

Добрый день!
Я решаю упражнение из книжки Страуструпа, в котором необходимо создать класс, который хранит параметры конcтруктора в своих данных членах, одним из параметров является функция.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
typedef double Func(double);
 
struct Fct {
    Fct(Func& f, double r, int count)
        : function(f), rr(r), step(count) 
    {}
 
    void set_function(Func& ff) { function = ff; } // да это неправильно,
// но я надеюсь идея того что мне нужно понятна
 
private:
 
    Func& function; // изменения в коде класса, 
//который расположен ниже происходят только в этой строке
    double rr;
    int step;
 
};
Я не могу сохранить его как "значение", я могу только хранить ссылку на него.
Мне необходима возможно менять ссылку на этот объект, и тут я зашел в тупик, потому что единственный выход, который я вижу - использовать указатели.
Но по материалу книги - мы не проходили указатели. Я знаю о них из другой книги, поэтому меня гложат сомнения.

Пример с указателями:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct Fct {
    Fct(Func& f, double r, int count)
        : function(f), rr(r), step(count) 
    {}
 
    void set_function(Func& ff) { function = ff; } // работает
 
private:
 
    Func* function; // указатель
    double rr;
    int step;
 
};

Спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.06.2013, 13:04     Есть ли альтернатива указателю на функцию
Посмотрите здесь:

Передача объекта по указателю в функцию - C++
Здравствуйте. При передаче объекта в метод другого объекта по указателю, метод получает непонятно что. class SomeObj { ...

Передача массива в функцию по указателю - C++
Помогите с заданием нужно передать массив в функцию по указателю

Передача вектора в функцию по указателю - C++
Есть функция с таким прототипом: void Split(const string& text, char delimeter, const vector<string>* pPars); как воспользоваться...

Передача в функцию по ссылке или указателю - C++
Гуру C++, как предпочтительнее делать?:) void f1(int &a) { a = 5; } void f2(int * a) {

Передачу аргументов в функцию по константному указателю - C++
Собственно, тривиальный пример с тривиальным вопросом, который вскрыл мое незнание. Почему выводит 5, а не 42? #include...

Не получается присвоить значение указателю на функцию - C++
В строке 26 говорит, что не может конвертировать тип. Что неправильно? #include "stdafx.h" #include <iostream> #include <conio.h> ...

Передача параметра по указателю в виртуальную функцию - C++
Добрый вечер и с наступающим всех Новым Годом! условие задачи такое: Мышь (абстрактный) Вход: x,y – начальные s – чувствительность ...

Передача аргументов в функцию по ссылке и указателю - C++
Чем отличается передача по ссылке от передачи по указателю аргументов в функцию?

Передача параметров в функцию по значению, по ссылке и по указателю - C++
Доброе время суток товарищи программисты. Столкнулся с кучей ошибок в написании простой программы. Задача заключается в том чтобы написать:...

Указатели и массивы. Передача массива в функцию по указателю - C++
Как передать массив в функцию,которая должна заполнить этот массив ? Вот,что я составил, но компилятор ругается: #include "stdafx.h" ...

Нюансы синтаксиса: как вызвать функцию по указателю? - C++
подскажите,как вызвать ф-цию ) int f(int&a, int&b) { return (a*b); } int main() { int a=6,b=5;

Скажите есть ли в с++ альтернатива оператору case в pascal - C++
Скажите есть ли в с++ альтернатива case как в паскале


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
13.06.2013, 13:41     Есть ли альтернатива указателю на функцию #2
тайпдеф указателя на функцию
C++
1
typedef double (*Func)(double);
Cynacyn
33 / 33 / 0
Регистрация: 02.05.2013
Сообщений: 109
13.06.2013, 14:20  [ТС]     Есть ли альтернатива указателю на функцию #3
Цитата Сообщение от Jupiter Посмотреть сообщение
тайпдеф указателя на функцию
C++
1
typedef double (*Func)(double);
мне бы совсем без указателей,

я хотел альтернативный вариант возможности хранения аргумента
C++
1
typedef double (Func)(double);
с возможностью его изменения

Добавлено через 7 минут
тоесть допустим я инициализирую объeкт
C++
1
Fct ff(sin,1.4,10);
а потом мне нужно изменить его таким образом

C++
1
ff.set_function(cos);
и всё это без указателей.
возможно ли это? или это трудности перевода, опечатка, или невнимательность Бьярне?
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
13.06.2013, 14:20     Есть ли альтернатива указателю на функцию #4
Функция - это код, чтоб его вызвать, нужен его адрес, единственное низкоуровневое данное, которое умеет хранить адрес - это указатель, а все эти иттераторы, умные указатели, параметры-ссылки - это только надстройки над ним, а не альтернативы. Обычная переменная-ссылка - это вообще не отдельное данное, а синоним другого данного. Как говорится, слово, которое используют тогда, когда забыли произношение и написание основного слова, тебе она не подходит по причине необходимости передачи параметра.
Cynacyn
33 / 33 / 0
Регистрация: 02.05.2013
Сообщений: 109
13.06.2013, 14:41  [ТС]     Есть ли альтернатива указателю на функцию #5
Цитата Сообщение от taras atavin Посмотреть сообщение
Функция - это код, чтоб его вызвать, нужен его адрес, единственное низкоуровневое данное, которое умеет хранить адрес - это указатель, а все эти иттераторы, умные указатели, параметры-ссылки - это только надстройки над ним, а не альтернативы. Обычная переменная-ссылка - это вообще не отдельное данное, а синоним другого данного. Как говорится, слово, которое используют тогда, когда забыли произношение и написание основного слова, тебе она не подходит по причине необходимости передачи параметра.
Спасибо.
Интересно, что подразумевал Страуструп? По-идее он предполагал что человек знакомый только со ссылками сможет решить эту задачу, иначе он бы намекнул хоть как-то (типа - ох прочитайте следующую главу сначала).
Как бы указатели только через две главы.
Yandex
Объявления
13.06.2013, 14:41     Есть ли альтернатива указателю на функцию
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru