Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
быдлокодер
1720 / 907 / 106
Регистрация: 04.06.2008
Сообщений: 5,623
1

У меня класс B в классе A, а в классе B рекурсивная функция переопределения оператора "()", как её вызвать, не создавая явно объект класса B?

07.06.2011, 20:34. Просмотров 928. Ответов 2
Метки нет (Все метки)


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <windows.h>
#include <iostream>
using namespace std;
 
 
//Вот главный класс
class A{
 public:
  A (){};
  class B; 
};
 
 
//А это вот определение класса внутреннего или как его там.
//ВСя эта муть  затеяна с одной целью- рекурсивно вызвать operator()
//дабы она вернула 1, 2, 3, 4, 5
class B { 
 public: 
  B(): i(0){} 
 int operator()(int x){ 
  if (i< 5)
   operator()(x);
   return (++i+x);
  } 
 
  private: 
   int i ; 
}; 
 
 
 
int main() {
 A ob_1  ();
 //cout<< " "<< ob_1::B()(6)<< endl;
 //cout<< " "<< ob_1::B(6)<< endl;
 //cout<< " "<< ob_1.B()(6)<< endl;
 //cout<< " "<< ob_1.B(6)<< endl;
 system ("pause");
}
Вообще это не муть, а в этом есть здравый смысл. Если кто будет настаивать, я объясню. Пока же суть такая, примерно так:
C++
1
cout<< " "<< ob_1::()(6)<< endl;
Создать безымянный объект класса B, а в нём должна сразу вызваться рекурсивная функция "operator () (int x)" и вернуть... ну чё-нибудь, по задумке 10 (и вывести соответственно 10), но пока я с рекурсией не разбирался очень-то. Щас бы вызвать функцию для начала.

Добавлено через 2 минуты
Последний код читать:
C++
1
cout<< " "<< ob_1::B()(6)<< endl;
Исправленному верить!!!!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.06.2011, 20:34
Ответы с готовыми решениями:

Как использовать объект класса, созданого в определеном классе, в другом классе
У меня такой вопрос,как использовать объект класса,созданого в определеном классе,в другом классе.У...

Вопр0с по перегрузке оператора "+"/"-" для массивов в классе
#include &lt;iostream&gt; using namespace std; /* Перевантаження операцій &quot;+&quot;,&quot;-&quot; для масивів символів...

Создать класс "Человек" и переназначить его методы в классе "Студент"
Ребят нужно доделать вывод на консоль и всё (вот условие), буду крайне благодарен за помощь ...

Переменная изменилась в одном классе, куда "воткнуть" код в другом классе
Привет всем, Достало это событийное программирование. :wall: Я не делаю событийные &quot;калькуляторы&quot;...

2
Freelance
Эксперт С++
2877 / 1812 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
07.06.2011, 21:00 2
Это будет не явно ?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <windows.h>
#include <iostream>
using namespace std;
 
 
//Вот главный класс
class A{
 public:
  A (){};
  class B;
};
 
 
//А это вот определение класса внутреннего или как его там.
//ВСя эта муть  затеяна с одной целью- рекурсивно вызвать operator()
//дабы она вернула 1, 2, 3, 4, 5
class B {
 public:
  B(): i(0){}
  static int f(int x){
    static B a;
    return a(x);
  }
 int operator()(int x){
  if (x < 5)
   operator()(++x);
  return (i-- + x);
  }
 
  private:
   int i;
};
 
 
int main() {
  std::cout << B::f(5) << B::f(5) << B::f(5) << B::f(5) << B::f(5);
 //system ("pause");
}
0
быдлокодер
1720 / 907 / 106
Регистрация: 04.06.2008
Сообщений: 5,623
07.06.2011, 21:49  [ТС] 3
Мне же рекурсивная нужна.

Добавлено через 1 минуту
И вызывать надо через A. Потому, что у меня будет объект класса A, а эта функция-, о которой идёт речь- метод.

Добавлено через 1 минуту
A ob_1 ();
cout<< " "<< ob_1::B()(6)<< endl;
ob_1 должно присутствовать

Добавлено через 15 минут
Прошу прощения, там в первом коде надо сперва создать объект класса A, вот так то есть:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <windows.h>
#include <iostream>
using namespace std;
 
 
//Вот главный класс
class A{
 public:
  A (){};
  class B; 
};
 
 
//А это вот определение класса внутреннего или как его там.
//ВСя эта муть  затеяна с одной целью- рекурсивно вызвать operator()
//дабы она вернула 1, 2, 3, 4, 5
class B { 
 public: 
  B(): i(0){} 
 int operator()(int x){ 
  if (i< 5)
   operator()(x);
   return (++i+x);
  } 
 
  private: 
   int i ; 
}; 
 
 
 
int main() {
 A ob_1;
 //cout<< " "<< ob_1::B()(6)<< endl;
 //cout<< " "<< ob_1::B(6)<< endl;
 //cout<< " "<< ob_1.B()(6)<< endl;
 cout<< " "<< ob_1.B(6)<< endl;
 system ("pause");
}
...А всё равно ошибки те же.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.06.2011, 21:49

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

В одном классе нужно создать массив, а в классе program его вывести. "Не все ветви кода возвращают значение"
В одном классе нужно создать массив, а в классе program его вывести, помогите, как разобраться ...

Как изменить данные экземпляра класса, находясь в другом классе? (Пишет не "существует в текущем контексте")
Добрый день. Объявил экземпляр &quot;Skvig&quot; в классе Main Подскажите, пожалуйста, как изменить данный...

Перегрузка оператора вывода в классе "Время"
Здравствуйте. Столкнулся с проблемой при работе с классом (Время), что выводит или чушь или вообще...

Ошибка "ссылка на нулевой объект" в классе, наследуемом от Fragment
Здравствуйте! Я хочу добавить Twitter api, но не могу это правильно сделать. Из-за этого...

Код срабатывает в событии кнопки, а в классе "не задана ссылка на объект"
как взять из формы и передать в функцию объект формы? написал в отдельном классе: public class...

Перегрузка оператора "+" в классе
Hello!! Я создаю класс двумерного массива. Использую данный код: template &lt;typename T&gt;...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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