|
Программирование >> Операторы преобразования типа
private: Т* ар; Указывает на принадлежащий объект public: typedef J elenient type; Конструктор explicit auto ptr (T* ptr 0) throwO : apCptr) { Копирующие конструкторы (с неявным преобразованием типа) Обратите внимание - параметр объявлен неконстантным! auto ptr (auto ptr& rhs) throwO : ap(rhs.release()) { tempiate<class Y> auto ptr (auto ptr<Y>& rhs) throwO : ap(rhs.releaseO) { Операторы присваивания (с неявным преобразованием типа) Обратите внимание - параметр объявлен неконстантным! auto ptr& operator* (auto ptr& rhs) throwC) { resetCrhs.releaseO): return *this; template<class Y> auto ptr& operator* (autoj)tr<Y>& rhs) throwO { resetCrhs.releasee)); return *this; Деструктор -auto ptrO throwC) { delete ap: Обращение no указателю T* getO const throwC) { return ap: T& operator*0 const throwO { return *ap; T* operator->0 const throwO { return ap; Освобождение принадлежащего объекта Т* releasee) throwO { Т* tmp(ap): ар = 0; return tnip: Повторная инициализация void reset СТ* ptr=0) throwC) { if Cap != ptr) { delete ap; ap = ptr; Специальные преобразования с применением вспомогатепьного типа используемые при копировании и присваивании auto ptr(auto ptr ref<T> rhs) throwO : ap(rhs.yp) { auto ptr& operator= (auto ptr ref<T> rhs) throwO { Новый reset(rhs.yp): return *this; tempiate<class Y> operator auto ptr ref<Y>C) throwO ( return auto ptr ref<Y>(releaseO); tempiate<class Y> operator auto ptr<Y>0 throwO { return auto ptr<Y>(releaseC)); Числовые пределы На практике предельные значения числовых типов зависят от платформы. В стандартной библиотеке С++ они реализованы в шаблоне numericjimits. Числовые пределы заменяют и дополняют обычные препроцессорные константы языка С. Впрочем, эти константы по-прежнему доступны для целочисленных типов в заголовочный файлах <climits> и <limits.h>, а для вещественных типов - в заголовочный файлах <float> и <float.h>. У новой концепции числовых пределов есть два достоинства: во-первых, она повышает уровень типовой безопасности, а во-вторых, позволяет программисту писать шаблоны, которые проверяют эти пределы. Этот раздел посвящен числовым пределам. Однако следует заметить, что всегда рекомендуется писать независимый от платформы код, рассчитанный на минимальный гарантированный размер данных типа. Минимальные размеры для разных типов перечислены в табл. 4.1. Таблица 4.1. Минимальный размер базовых типов Тип Минимальный размер
Класс numeric limits Обычно шаблоны применяются для реализации некой функциональности в любом типе. Однако шаблоны также могут использоваться для определения общего интерфейса, реализуемого в типах, поддерживающих этот интерфейс. Для этой цели определяются специализированные версии обобщенного шаблона. Ниже показано, как эта методика применяется в шаблоне numericjimits. О Обобщенный шаблон задает числовые пределы по умолчанию для произвольного типа: namespace std { /* Числовые пределы по умолчанию для произвольного типа */ template <cla5s Т> class numericjimits ( public: Специализация числовых пределов отсутствует static const bool is specialized = false: ... Прочие члены класса, которые не имеют смысла для обобщенных числовых пределов Обобщенный шаблон числовых пределов указывает лишь на то, что для типа Т числовые пределы не определены. Для этого переменной is specialized присваивается значение false. О Специализированные версии шаблона определяют числовые пределы для всех числовых типов: namespace std { /* Числовые пределы для int */ template <> class numericjimits<int> {
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |