Как и наш динамический массив ТАггау (см. листинг 6.10), класс TSimpleArray значительно «умнее» встроенных массивов. Массивы можно присваивать без написания циклов, перехватывается типичнейшая (и наиболее распространенная) ошибка «вылета за границу» массива, что здорово облегчает жизнь программисту. Однако в классе отсутствует конструктор без аргументов, что создает некоторое неудобство.
Как мы знаем, в обычном классе можно не определять конструктор без аргументов, если присвоить значения по умолчанию параметрам в конструкторе инициализации. Для каждого конкретного типа это легко можно сделать. Однако для шаблонного класса тут возникает проблема, так как конкретный тип присваиваемого выражения неизвестен. Тем не менее в стандарте такая ситуация учтена, и мы можем реализовать конструктор инициализации таким образом:
TSimpleArray(const Т &t = T()): // прототип
template<typename Т, std::size_t N>// реализация
TSimpleArray<T,N>::TSimpleArray(const T &t) {for (int i = 0: i<N; i++) elem[i] = t: } Следующая конструкция может быть задана, естественно, не в прототипе, а в заголовке реализации конструктора:
const Т &t = Т()
Для любого класса Т она означает явный вызов конструктора без аргументов — подставляемый вместо Т класс должен такой конструктор иметь. Однако для встроенных типов конструкторов не существует. Тем не менее для встроенных типов стандарт определяет смысл присваивания как инициализацию нулем:
т t = то
Например:
int t = into:
Опубликовал Kest
December 10 2013 21:23:00 ·
0 Комментариев ·
4760 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.