C++ - Страустрап Бьярн, Хилл Мюррей
-
Название:C++
-
Автор:
-
Жанр:
-
Оригинал:Английский
-
Язык:Русский
-
Страниц:161
-
Рейтинг:
-
Ваша оценка:
Основным термином С++ является класс. Класс – это вид, который определяет сам пользователь. Классы обеспечивают анонимность данных, обеспеченную инициализацию информации, смутное преобразование видов для видов, определенных эксплуатантом, меняющееся задание вида, управляемые пользователем контроль над памятью и механизмы перезагрузки процессов. С++ предоставляет более качественные, чем в C, средства выражения модульного принципа программы и проверки видов. В языке также присутствуют апгрейды, не связанные напрямую с классами, включающие в себя символические постоянные, параметры функции по умолчанию, inline-подстановку функций, операции управления свободной памятью и ссылочный тип, перезагруженные имена функций. В С++ сохранены потенциалы языка C по работе с заглавными предметами машинного обеспечения (байты, биты, адреса, слова и т.п.). Это дает шанс весьма продуктивно воспроизводить виды, определяемые эксплуатантом.
С++ и его библиотеки установленные по умолчанию спроектированы так, чтобы гарантировать переносимость. Имеющееся на данный временной отрезок воспроизводство языка будет идти в большинстве систем, которые в состоянии поддерживать C. Из С++ программ возможно прибегать к пользованию C библиотеки, и с С++ возможно прибегать к пользованию большей части инструментальных средств, поддерживающих программирование на C.
Эта книга рассчитана в первую очередь для того, чтобы оказать помощь опытным программистам изучить язык и применять его в нестандартных проектах. В ней дано полное описание С++, множество фрагментов программ и примеров.
C++ - Страустрап Бьярн, Хилл Мюррей читать онлайн бесплатно полную версию книги
8.5.6 Преобразования
Конструктор, получающий один параметр, определяет преоразование из типа своего параметра в тип своего класса. Такие преобразования неявно применяются дополнительно к стандартным пробразованиям (#6.6-7). Поэтому присваивание объекту из класса X допустимо, если тип T присваиваемого значения есть X, или если было описано преобразование из T в X. Аналогично конструкторы используются для преобразования инициализаторов (#8.6), параметров функции (#7.1) и возвращаемых функцией значений (#9.10). Например:
class X (* ... X (int); *); f (X arg) (* X a = 1; // a = X (1) a = 2; // a = X (2) f (3); // f (X (3)) *)
Если ни один конструктор для класса X не получает приваиваемый тип, то не делается никаких попыток отыскать другие конструкторы для преобразования присваиваемого значения в тип, который мог бы быть приемлем для конструкторов класса X. Например: class X (* ... X (int); *); class X (* ... Y (X); *); Y a = 1; // недопустимо: Y (X (1)) не пробуется Функция член класса X с именем вида имя_функции_преобразования:
operator тип
задает преобразование из X в тип. Тип не может содержать описания [] «вектор из» или () «функция, возвращающая». Оно будет применяться неявно аналогично конструкторам выше (толко если оно единственно: #8.9), или его можно вызвать явно с помощью записи приведения к типу. Например:
class X (* // ... operator int(); *);
X a; int i = int(a); i = (int)a; i = a;
Во всех трех случаях значене будет преобразовываться функцией X::operator int(). Применение определяемых пользовтелем преобразований не сводится только к присваиваниям и инициализациям. Например:
X a, b; // ... int i = (a) ? 1+a : 0; int j = (a amp; amp;b) ? a+b : i;
8.5.7 Деструкторы
Функция член класса cl с именем ~cl называется деструтором. Деструктор не возвращает никакого значения и не полчает никаких параметров; он используется для уничтожения знчений типа cl непосредственно перед уничтожением содержащего их объекта. Деструктор не может быть вызван явно.
Деструктор для базового класса выполняется после десруктора производного от него класса. Деструкторы для объектов членов выполняются после деструктора для объекта, членом кторого они являются. Как деструкторы используютя для управлния свободной памятью, см. объяснение в #8.5.8.
Объект класса с деструктором не может быть членом обединения.
8.5.8 Свободная память
Когда с помощью операции new создается классовый объект, то для получения необходимой памяти конструктор будет (неяно) использовать operator new (#7.1). Конструктор может осществить свое собственное резервирование памяти посредством присваивания указателю this до каких-либо использований члна. С помощью присваивания this значения ноль деструктор мжет избежать стандартной операции дерезервирования памяти для объекта его класса. Например:
class cl (* int v[10]; cl () (* this = my_own_allocator (sizeof (cl)); *) ~cl () (* my_own_deallocator (this); this = 0; *) *) На входе в конструктор this являеется не-нулем, если рзервирование памяти уже имело место (как это имеет место для auto, static объектов и объектов членов), и нулем в остальных случаях. Вызовы конструкторов для базового класса и объектов члнов будут иметь место после присваивания указателю this. Если
конструктор базового класса осуществляет присваивание this, то новое значение также будет использоваться конструктором производного класса (если таковой есть).
При уничтожении вектора объектов класса с деструктором необходимо указывать число элементов. Например:
class X (* ... ~X(); *); X* p = new X [size]; delete[size] p;