Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рекурсия разложенная "по полочкам" 
:(
    Опции темы
EgoBrain
Дата 3.6.2013, 03:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 23.3.2008
Где: Комната

Репутация: нет
Всего: 2



Цитата(mes @ 31.5.2013,  10:06)
вот еще один примерчик, для эксперимента :
Код

#include <cstdio>

struct Scope
{
  int mIndex;
  Scope(int idx) : mIndex(idx) 
  {
    for (int i=0; i<mIndex; ++i)
      printf(".");

    printf("-> %d\n",mIndex );  
  }
 ~Scope() 
 {
    for (int i=0; i<mIndex; ++i)
      printf(".");

    printf("<- %d\n",mIndex ); 
 }   
};

void f(int i, int j)
{
  Scope scope(i);

  if (i>=j) return; // exit

  f(i+1, j-1);

//~Scope(i);
}

int main()
{
  f(5,10);
}

А зачем такая запись?
Цитата

Scope(int idx) : mIndex(idx)

Чем плоха стандартная наглядная и простая
Код

Scope(int idx)
  {
      mIndex = idx;

Подобная запись с перечислением после двоеточия в сигнатуре конструктора класса может быть оправдана,
если задаются значения атрибутам которые сами являются объектами другого класса с наличием копирующего конструктра,
например
Код

class Scope
{
    string mIndex;
    Scope(int idx); //----
};

Scope::Scope(int idx) : mIndex(idx)
{

}

Но здесь же int. Значит учтивая свою неопытность и авторитет предыдущего оратора, делаю вывод что здесь есть какой-то мне неизвестный смысл
PM MAIL ICQ Skype   Вверх
borisbn
Дата 3.6.2013, 06:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



EgoBrain
1) Это способ инициализации переменной при создании, а в твоём варианте будет лишняя операция - сначала создание (без этого никуда), потом присвоение
2) Сегодня это int, а завтра какой-нибудь BigInt... В варианте mes менять нужно будет меньше


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
EgoBrain
Дата 3.6.2013, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 23.3.2008
Где: Комната

Репутация: нет
Всего: 2



borisbn, а можно подробнее?
1). То есть ты хочешь сказать что в варианте mes копия аргумента не будет созадана а занчение в mIndex просто передастся по ссылке?
2). Чего меньше менять нужно?  smile 
PM MAIL ICQ Skype   Вверх
borisbn
Дата 3.6.2013, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



EgoBrain
1) нет. см. п. 2) 
2) http://ideone.com/v5dkzo
dummy нужен для того, чтобы в этой строчке (№ 34)
Код
BigInt bi( (dummy()) );

ничего не печаталось

Это сообщение отредактировал(а) borisbn - 3.6.2013, 22:06


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
borisbn
Дата 3.6.2013, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Для int'а будет не "very very long operation", а "very very short operation", но если таких объектов будет создаваться много, то это будет отнимать время


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
mes
Дата 3.6.2013, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(borisbn @  3.6.2013,  21:08 Найти цитируемый пост)
, то это будет отнимать время 

да дело даже не во времени.. 

Цитата(EgoBrain @  3.6.2013,  02:51 Найти цитируемый пост)
Чем плоха стандартная наглядная и простая

тем, что эта наглядная форма задает очень много вопросов :
А есть ли конструктор по умолчанию ? а можно ли заменить инициализацию присваиванием 
? а в том ли порядке инициализируются присваиваются переменные? а какое поведение обьекта при присваивании ? и т.д. Конечно учитывая, что раздел новичков, можно было написать и в "стандартной" форме, но сработала привычка..  

Цитата(borisbn @  3.6.2013,  05:44 Найти цитируемый пост)
Сегодня это int, а завтра какой-нибудь BigInt

зачем так далеко ходить ? 


EgoBrain, пометьте mIndex как const  и испробуйте "стандартную" форму записи  smile

Добавлено через 1 минуту и 40 секунд
Цитата(EgoBrain @  3.6.2013,  02:51 Найти цитируемый пост)
Но здесь же int

для анализа этой мысли требуется время, которое лучше потратить на что нибудь более полезное  smile 


--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

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


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0713 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.