Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705

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

17.12.2011, 08:15. Показов 2057. Ответов 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");}
Вот если закомментить конструктор и ракомментить чё в даный момент закомменчено, то получится что конструктор объявлен в классе, а определён за его пределами. И тогда ничё компилиться не будет. Почему? (А щас компилится).
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.12.2011, 08:15
Ответы с готовыми решениями:

Можно ли использовать конструктор по умолчанию и конструктор инициализации одновременно?
Можно ли использовать конструктор по умолчанию и конструктор инициализации одновременно?

Будет ли определен компилятором конструктор по умолчанию, если есть конструктор с дефолтным параметром?
Добрый день, сразу к делу, есть некий класс class some { int x; public: some(int y = 1) : x(y) {} };

Почему в конструкторе QMAinQindow нельзя обрабатывать исключения
Вот написал код конструтора ChildWindow::ChildWindow(QWidget *par) : QMAinWindow(par) { try { p = NULL; ...

5
6 / 6 / 1
Регистрация: 04.01.2010
Сообщений: 118
17.12.2011, 08:22
Темплейты вообще не желательно выносить за пределы класса. Поэтому для них и используют *.hpp Там частенько надо еще указывать все возможные варианты значения Т.
А вот почему - кроме как "так реализовали" я тебе ответить не могу. Надо просто помнить, что темплейты, по сут, другой язык, пристоенный к компилятору с++, и там свои заморочки.
1
387 / 151 / 16
Регистрация: 12.05.2011
Сообщений: 450
17.12.2011, 09:44
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");}
Дефолтные параметры указываются только один раз. Касается и обычных функций и шаблонов.
1
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
17.12.2011, 10:25
Цитата Сообщение от Card1nal Посмотреть сообщение
Темплейты вообще не желательно выносить за пределы класса.
Это еще почему?
0
6 / 6 / 1
Регистрация: 04.01.2010
Сообщений: 118
17.12.2011, 14:44
Цитата Сообщение от fasked Посмотреть сообщение
Это еще почему?
По причине читаемости. Их поэтому в hpp, как я уже сказал, и пишут. Одно дело когда код без темплейтов - да, там проще иметь прототипы в .h. А в темплейтах хотелось бы видить, что, собственно говоря меняется.
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
17.12.2011, 14:51
Цитата Сообщение от Card1nal Посмотреть сообщение
По причине читаемости.
нет, по причине "невозможности" импорта шаблонов в файл реализации

Цитата Сообщение от Card1nal Посмотреть сообщение
Их поэтому в hpp, как я уже сказал, и пишут. Одно дело когда код без темплейтов - да, там проще иметь прототипы в .h
Шаблоны можно писать в заголовчном файле. Заголовочный файл может иметь расширение как *.h так и *.hpp
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.12.2011, 14:51
Помогаю со студенческими работами здесь

Почему нужно обязательно вызывать конструктор суперкласса в конструкторе подкласса?
Или же я не так понял ошибку, выданною NetBeans, при написании данного кода package javaapplication27; public class Figure { ...

Почему нельзя вызывать конструктор без аргументов?
В чем может быть ошибка? На Visual Studio все работает #include &lt;iostream&gt; #include &lt;cstring&gt; using namespace std; class...

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

Почему вызывается конструктор копий по умолчанию?
Всем добрый день! Не могу понять, почему не вызывается конструктор копий. Вот, для примера, код: class TestClass { public: ...

Если нельзя инициализировать по умолчанию глобальную static, то есть ли альтернатива?
Здравствуйте! Как известно, де-факто по стандарту C нельзя инициализировать по умолчанию глобальную static - переменную чем-то сложнее...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru