быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
|||||||||||
1 | |||||||||||
В конструкторе вложенного класса инициализируется приватное поле. Потом вызывается функция-метод этого класса и выводит значение этого поля НО НЕ ТО!08.06.2011, 00:24. Показов 4018. Ответов 21
Метки нет (Все метки)
Друзья! Почему так?
ob_1.B_() и я с её помощью очень хочу увидеть ноль, но не вижу. Почему, друзья? Добавлено через 1 минуту Последний код читать: ob_1.B_()(6); Исправленному верить!!!
0
|
08.06.2011, 00:24 | |
Ответы с готовыми решениями:
21
Можно ли сделать поле класса параметром функции-члена этого же класса? Как вызвать метод класса в другом методе этого же класса? Может ли метод класса возвращать экземпляр этого же класса? Как вызвать виртуальную функцию из дочернего класса, если она определена и вызывается в конструкторе РОДИТЕЛЬСКОГО класса? |
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
|
08.06.2011, 21:52 [ТС] | 21 |
Мда уж... Мне в голову не приходило, что переменной static можно присвоить какое-то иное значение кроме начального, ни разу с этим не сталкивался. Просто я ни разу не сталкивался, с рекурсивной функцией, которая вызывается несколько раз. Просто вроде, а вот поди ж ты... Да ещё и старина Аммерааль подлил масла в огонь, а я некритически отнёсся к авторитету. Вот текст из его книги, сдуто с формата djvu.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Мы можем использовать алгоритм for_each для вызова функции с каждым из элементов последовательности в качестве аргумента. Вот программа, которая демонстрирует это: // for_each.cpp: Алгоритм for_each. #include <iostream> #include <algorithm> using namespace std; void display(int x){ static int i=0; cout << "a[" << i++ << "] = " << x << endl; } int main() { const int N = 4; int a[N] = {1234, 5432, 8943, 3346}; for_each(a, a+N, display); return 0; } Эта программа работает точно так же, как если бы мы заменили вызов for_each следующим оператором for. for (int *р=а; р != a+N; р++) display(*р); В любом случае программа выведет а[0] = 1234 а[1] = 5432 а[2] = 8943 а[3] = 3346 Функция display в этом примере обладает существенным недостатком: переменная i равна нулю только тогда, когда эта функция вызывается в первый раз. Например, еще один такой же вызов for_each в функции main приведет к ошибке, поскольку при повторном вызове функция display не начнет с i = 0. Мы можем решить эту проблему с помощью функционального объекта. Заменим функцию display следующим определением класса: class display { public: display(): i(0){) void operator()(int x) { cout << "a[n" << i++ <<"]=" << x << endl; } private: int i ; }; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Кошмар. Спасибо всем большое, если чё, я отпишусь тут ещё.
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
08.06.2011, 21:57 | 22 |
kravam, функция действительно этим недостатком обладает))) Просто тут так не выйти из положения, вы точно знаете, что ваша функция вызовется пять раз, поэтому можно статическую переменную после этих пяти раз обнулить, а у автора неизвестно, с какими массивами будет работать функция. Вдруг в этот раз ей надо обработать массив из 5 элементов, а в следующий раз - из 7. Когда обнулять? Неизвестно. Поэтому здесь действительно нужен функтор.
0
|
08.06.2011, 21:57 | |
08.06.2011, 21:57 | |
Помогаю со студенческими работами здесь
22
Как связать сигнал одного класса со слотом другого класса, содержащего указатель на объект этого класса? Как получить значение поля класса Окна в классе Контроллера для этого окна? Обращение к классу через поле этого класса Как вызвать метод вложенного класса в методе родительского класса Создать шаблонный класс и наследованный от этого класса метод Access, в поле значение по умолчанию из предыдущей записи этого же поля Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |