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

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

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

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

17.12.2011, 08:15. Просмотров 904. Ответов 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     Почему нельзя в конструкторе использовать параметр по умолчанию, если конструктор не встроен?
Посмотрите здесь:

Почему break нельзя использовать в if? - C++
почему break нельзя использовать в if вот код if(f.eof()==1) { break; } про break MVS говорит что ОПЕРАТОР break...

Почему не работает следующий код из книги Страуструпа (конструктор значений по умолчанию) - C++
#include&lt;iostream&gt; using namespace std; class Date { int a, b; static Date default_date; public: Date(int x = 0, int...

Почему нельзя использовать в операторе case переменные, которые определены как #define - C++
Я не понимаю, почему Visual Studio ругается на строку с case в коде. Вроде все правильно. Если там написать напрямую цифру, тогда все...

Ошибка: Нельзя инициализировать статические данные в конструкторе - C++
Ошибка: Нельзя инициализировать статические данные в конструкторе. //#include &lt;string.h&gt; #include &lt;stdio.h&gt; //#include &lt;conio.h&gt; ...

Почему нехорошо себя ведёт конструктор класса (не компилится ничё), если ему параметром ссылку на константу? - C++
То есть вообще непонятно ничё, вот, смотрите, этот пример не компилится: #include &lt;stdio.h&gt; class fee { public: //Не компилится ...

Параметр в конструкторе копирования - C++
Есть класс class CMatrix{ valarray&lt;valarray&lt;double&gt; &gt; matrix; public: CMatrix(const CMatrix &amp;M); ..... }; ...

Еще раз о конструкторе по умолчанию - C++
Какой конструктор считается конструкторомм по умолчанию, которому НЕ ПЕРЕДАЮТСЯ НИКАКИЕ АРГУМЕНТЫ, или же и тот конструктор, КОТОРОМУ ЯВНО...

Можно ли в конструкторе копирования поменять один параметр? - C++
Здравствуйте. Мне нужно при создании объекта через конструктор копирования поменять один параметр в конструкторе. Такое можно реализовать?

Как вызвать конструктор с параметрами в конструкторе без параметров? - C++
Как вызвать конструктор с параметрами в конструкторе без параметров? То есть что бы конструктор с параметрами выступал в роли основного. В...

Хорошо ли использовать унарный плюс вместо функции получения модуля? Если нет, то почему? - C++
...

Почему после передачи в функцию массива, выводятся случайные числа, если использовать *(uk++) во второй раз? - C++
Интересует такой вопрос: почему после передачи в функцию массива выводятся случайные числа из оперативной памяти, если использовать *(uk++)...

Конструктор по умолчанию - C++
У меня получается создавать конструктор по умолчанию если в хедере эти значения указаны: class Unit { protected: string name; ...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Card1nal
6 / 6 / 0
Регистрация: 04.01.2010
Сообщений: 118
17.12.2011, 08:22     Почему нельзя в конструкторе использовать параметр по умолчанию, если конструктор не встроен? #2
Темплейты вообще не желательно выносить за пределы класса. Поэтому для них и используют *.hpp Там частенько надо еще указывать все возможные варианты значения Т.
А вот почему - кроме как "так реализовали" я тебе ответить не могу. Надо просто помнить, что темплейты, по сут, другой язык, пристоенный к компилятору с++, и там свои заморочки.
yekka
385 / 149 / 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
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 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
Каратель
Эксперт С++
6552 / 3972 / 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     Почему нельзя в конструкторе использовать параметр по умолчанию, если конструктор не встроен?
Ответ Создать тему
Опции темы

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