Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2012, 00:08   #11
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
На языке с++ конструктором по умолчанию является либо дефолтный конструктор, генерируемый компилятором, либо явно определенный конструктор, способный принимать все свои аргументы по умолчанию.
Интересная трактовка. В любом случае, как добиться заявленного эффекта, я по-прежнему не представляю: значение параметра по умолчанию может быть только константой, а вторая форма конструктора эквивалентна первой с равными аргументами.
Молчу уж о том, что если можно править только заголовочный файл, фокус не пройдёт в любом случае.
Abstraction вне форума Ответить с цитированием
Старый 11.12.2012, 07:06   #12
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение
Интересная трактовка. В любом случае, как добиться заявленного эффекта, я по-прежнему не представляю: значение параметра по умолчанию может быть только константой, а вторая форма конструктора эквивалентна первой с равными аргументами.
Молчу уж о том, что если можно править только заголовочный файл, фокус не пройдёт в любом случае.
Выше был пример, как добиться заявленного эффекта, модифицировав только хэдэр.

Что именно не понятно?

Кстати, значение по умолчанию не обязательно должно быть константой:

Код:
Ctor( const T& src = SrcData() ){}
Здесь, SrcData() может возвращать самые различные значения в рантайме, если SrcData - это функция.

И даже различные типы этих разных значений, если SrcData - это конструктор класса

http://ideone.com/GoQVUN

А вот эта вот разновидность фабрики объектов позволяет свести к минимуму количество шаблоно-кода, а заодно попрятать реализацию всея и всего в единицы трансляции:

http://ideone.com/XugEEd

Последний раз редактировалось _Bers; 11.12.2012 в 07:54.
_Bers вне форума Ответить с цитированием
Старый 11.12.2012, 09:26   #13
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Выше был пример, как добиться заявленного эффекта, модифицировав только хэдэр.

Что именно не понятно?
Код:
Rectangl5 r1(3);
Rectangl5 r2(5);
Rectangl5 r3(3, 5);
assert(r1.Area() == 9);
assert(r2.Area() == 25);
assert(r3.Area() == 15);
Вы хотите сказать, что можно создать одну форму конструктора вместо всех приведённых, так, что поведение данного кода не изменится?
Кроме того, разве отсутствие в заголовке конструктора Rectangl5(float) не вызовет ошибку при компиляции? MSVC лично меня послал.

Цитата:
Кстати, значение по умолчанию не обязательно должно быть константой:
Моя лажа, да. Значение не может включать переменные, не определённые в момент компиляции.
Abstraction вне форума Ответить с цитированием
Старый 11.12.2012, 13:55   #14
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение
Код:
Rectangl5 r1(3);
Rectangl5 r2(5);
Rectangl5 r3(3, 5);
assert(r1.Area() == 9);
assert(r2.Area() == 25);
assert(r3.Area() == 15);
Вы хотите сказать, что можно создать одну форму конструктора вместо всех приведённых, так, что поведение данного кода не изменится?
Кроме того, разве отсутствие в заголовке конструктора Rectangl5(float) не вызовет ошибку при компиляции? MSVC лично меня послал.

Моя лажа, да. Значение не может включать переменные, не определённые в момент компиляции.
Конечно будет ошибка компиляции. Реализации без прототипа быть не может.
Ты слишком буквально понял задачу. Уничтожать старые конструкторы не нужно)

Это можно сделать при помощи препроцессора, а потом написать в хэдэре новый конструктор. Но это уже для извращенцев))
_Bers вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Класс конструктор по умолчанию Madmaxisss Visual C++ 6 15.07.2011 20:22
не могу создать конструктор с параметрами по умолчанию wwe2012 Общие вопросы C/C++ 3 30.03.2011 17:20
Конструктор по умолчанию. Jane-sad Помощь студентам 1 23.11.2010 11:52
Конструктор по умолчанию Rembo Общие вопросы C/C++ 9 30.07.2008 09:54