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

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

Войти
Регистрация
Восстановить пароль
 
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,304
#1

Почему нельзя в конструкторе использовать параметр по умолчанию, если конструктор не встроен? - C++

17.12.2011, 08:15. Просмотров 878. Ответов 5
Метки нет (Все метки)

То есть честно говоря, вопрос так надо ставить: почему если конструктор встроенный, то можно использовать параметр (по умолчанию) шаблона класса, а если не встроеный, то нельзя? Если бы было единообразие, я бы может списал всё на стандарт, а так какой-то двойной стандарт получается!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 #include <stdio.h>
template <class T= int >
class kl {
 public:
  kl (T) {printf ("hello, word!\n");};
  //kl (T);
};
 
int main () {
 kl<> kl_ (45);
 getchar ();
 return 0;
}
 
//template <class T= int >
//kl <T>:: kl (T) {printf ("hello, word!\n");}
Вот если закомментить конструктор и ракомментить чё в даный момент закомменчено, то получится что конструктор объявлен в классе, а определён за его пределами. И тогда ничё компилиться не будет. Почему? (А щас компилится).
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.12.2011, 08:15     Почему нельзя в конструкторе использовать параметр по умолчанию, если конструктор не встроен?
Посмотрите здесь:

Создать класс "Вектор" и реализовать конструктор по умолчанию, конструктор копирования и деструктор C++
Почему нехорошо себя ведёт конструктор класса (не компилится ничё), если ему параметром ссылку на константу? C++
C++ Параметр в конструкторе копирования
Почему нельзя использовать в операторе case переменные, которые определены как #define C++
C++ Почему break нельзя использовать в if?
C++ Создать класс. Написать конструктор по умолчанию, конструктор с параметрами. Перегрузить операции «меньше» и «равно»
C++ Почему в списке инициализации конструктора дочернего класса нельзя вызывать конструктор родительского через его пространство имён?
Почему в выражении нельзя использовать запятую вместо && C++
C++ Будет ли определен компилятором конструктор по умолчанию, если есть конструктор с дефолтным параметром?
Ошибка: Нельзя инициализировать статические данные в конструкторе C++
C++ Можно ли использовать конструктор по умолчанию и конструктор инициализации одновременно?
Почему не работает следующий код из книги Страуструпа (конструктор значений по умолчанию) C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Card1nal
6 / 6 / 0
Регистрация: 04.01.2010
Сообщений: 118
17.12.2011, 08:22     Почему нельзя в конструкторе использовать параметр по умолчанию, если конструктор не встроен? #2
Темплейты вообще не желательно выносить за пределы класса. Поэтому для них и используют *.hpp Там частенько надо еще указывать все возможные варианты значения Т.
А вот почему - кроме как "так реализовали" я тебе ответить не могу. Надо просто помнить, что темплейты, по сут, другой язык, пристоенный к компилятору с++, и там свои заморочки.
yekka
384 / 148 / 8
Регистрация: 12.05.2011
Сообщений: 450
17.12.2011, 09:44     Почему нельзя в конструкторе использовать параметр по умолчанию, если конструктор не встроен? #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
template <class T= int >
class kl {
 public:
  kl (T);
};
 
int main () {
 kl<> kl_ (45);
 return 0;
}
 
template <class T >
kl <T>:: kl (T) {printf ("hello, word!\n");}
Дефолтные параметры указываются только один раз. Касается и обычных функций и шаблонов.
fasked
Эксперт C++
 Аватар для fasked
4929 / 2509 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
17.12.2011, 10:25     Почему нельзя в конструкторе использовать параметр по умолчанию, если конструктор не встроен? #4
Цитата Сообщение от Card1nal Посмотреть сообщение
Темплейты вообще не желательно выносить за пределы класса.
Это еще почему?
Card1nal
6 / 6 / 0
Регистрация: 04.01.2010
Сообщений: 118
17.12.2011, 14:44     Почему нельзя в конструкторе использовать параметр по умолчанию, если конструктор не встроен? #5
Цитата Сообщение от fasked Посмотреть сообщение
Это еще почему?
По причине читаемости. Их поэтому в hpp, как я уже сказал, и пишут. Одно дело когда код без темплейтов - да, там проще иметь прототипы в .h. А в темплейтах хотелось бы видить, что, собственно говоря меняется.
Jupiter
Каратель
Эксперт C++
6547 / 3967 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.12.2011, 14:51     Почему нельзя в конструкторе использовать параметр по умолчанию, если конструктор не встроен? #6
Цитата Сообщение от Card1nal Посмотреть сообщение
По причине читаемости.
нет, по причине "невозможности" импорта шаблонов в файл реализации

Цитата Сообщение от Card1nal Посмотреть сообщение
Их поэтому в hpp, как я уже сказал, и пишут. Одно дело когда код без темплейтов - да, там проще иметь прототипы в .h
Шаблоны можно писать в заголовчном файле. Заголовочный файл может иметь расширение как *.h так и *.hpp
Yandex
Объявления
17.12.2011, 14:51     Почему нельзя в конструкторе использовать параметр по умолчанию, если конструктор не встроен?
Ответ Создать тему
Опции темы

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