LibKing » Книги » comp-programming » Мюррей Хилл - C++

Мюррей Хилл - C++

Тут можно читать онлайн Мюррей Хилл - C++ - бесплатно полную версию книги (целиком). Жанр: comp-programming. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте LibKing.Ru (ЛибКинг) или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
libking
  • Название:
    C++
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    3.9/5. Голосов: 101
  • Избранное:
    Добавить в избранное
  • Ваша оценка:

Мюррей Хилл - C++ краткое содержание

C++ - описание и краткое содержание, автор Мюррей Хилл, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

С++ – это универсальный язык программирования, задуманный так, чтобы сделать программирование более приятным для серьезного программиста. За исключением второстепенных деталей С++ является надмножеством языка программирования C. Помимо возможностей, которые дает C, С++ предоставляет гибкие и эффективные средства определения новых типов. Используя определения новых типов, точно отвечающих концепциям приложения, программист может разделять разрабатываемую программу на легко поддающиеся контролю части. Такой метод построения программ часто называют абстракцией данных. Информация о типах содержится в некоторых объектах типов, определенных пользователем. Такие объекты просты и надежны в использовании в тех ситуациях, когда их тип нельзя установить на стадии компиляции. Программирование с применением таких объектов часто называют объектно-ориентированным. При правильном использовании этот метод дает более короткие, проще понимаемые и легче контролируемые программы.

Ключевым понятием С++ является класс. Класс – это тип, определяемый пользователем. Классы обеспечивают сокрытие данных, гарантированную инициализацию данных, неявное преобразование типов для типов, определенных пользователем, динамическое задание типа, контролируемое пользователем управление памятью и механизмы перегрузки операций. С++ предоставляет гораздо лучшие, чем в C, средства выражения модульности программы и проверки типов. В языке есть также усовершенствования, не связанные непосредственно с классами, включающие в себя символические константы, inline-подстановку функций, параметры функции по умолчанию, перегруженные имена функций, операции управления свободной памятью и ссылочный тип. В С++ сохранены возможности языка C по работе с основными объектами аппаратного обеспечения (биты, байты, слова, адреса и т.п.). Это позволяет весьма эффективно реализовывать типы, определяемые пользователем.

С++ и его стандартные библиотеки спроектированы так, чтобы обеспечивать переносимость. Имеющаяся на текущий момент реализация языка будет идти в большинстве систем, поддерживающих C. Из С++ программ можно использовать C библиотеки, и с С++ можно использовать большую часть инструментальных средств, поддерживающих программирование на C.

Эта книга предназначена главным образом для того, чтобы помочь серьезным программистам изучить язык и применять его в нетривиальных проектах. В ней дано полное описание С++, много примеров и еще больше фрагментов программ.

C++ - читать онлайн бесплатно полную версию (весь текст целиком)

C++ - читать книгу онлайн бесплатно, автор Мюррей Хилл
Тёмная тема

Шрифт:

Сбросить

Интервал:

Закладка:

Сделать

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;

8.5.9 Видимость Имен Членов

Члены класса, описанные с ключевым словом class, являюся закрытыми, то есть, их имена могут использоваться только функциями членами (#8.5.2) и друзьями (см. #8.5.10), если они не стоят после метки «public:». В этом случае они являются открытыми. Открытый член может использоваться любой функцией. Struct является классом, все члены которого общие, см. #8.5.12.

Если производный класс описан как struct или если перед именем базового класса в описании производного класса стоит ключевое слово public, то общие члены базового класса являюся общими для производного класа; в остальных случаях они яляются закрытыми. Открытый член mem закрытого базового класса base может быть описан как общий для производного класса с помощью опиисания вида

typedef-имя :: идентификатор ;

в котором typedef-имя обозначает базовый класс, а идетификатор есть имя члена базового класса. Такое описание должно стоять в открытой части производного класса. Рассморим

class base (* int a; public: int b, c; int bf(); *);

class derived : base (* int d; public: base::c; int e; int df(); *);

int ef(derived amp;);

Внешняя функция ef может использовать только имена c, e и df. Являясь членом производного derived, функция df может использовать имена b, c, bf, d, e и df, но не a. Являясь члном базового base, функция bf может использовать члены a, b, c и bf.

8.5.10 Друзья

Друг класса – это функция не-член, которая может исползовать имена закрытых членов. Друг не принадлежит области вдимости класса и не вызывается с помощью синтаксиса выбора члена (если он не является членом другого класса). Следующий пример иллюстрирует различия между членами и друзьями:

class private (* int a; friend void friend_set(private*, int); public: void member_set(int); *);

void friend_set (private* p, int i) (* p-»a = i; *)

void private::member_set (int i) (* a = i; *)

private obj; friend_set ( amp;obj,10); obj.member_set (10);

Если описание friend отностися к перегруженному имени или операции, то другом становится только функция, задаваемая типами параметров. Член класса cl1 может быть другом класса cl2. Например:

class cl2 (* friend char* cl1::foo(int); // ... *);

Все функции класса cl1 могут быть сделаны друзьями класа cl2 с помощью одного описания

class cl2 (* friend class cl1 ; // ... *);

Функция член, определенная (#10) в описании класса, яляется inline.

8.5.11 Функция Операция

Большинство операций могут быть перегружены с тем, чтобы они могли получать в качестве операндов объекты класса.

имя_функции_операции: operator операция

операция: одна из new delete + – * / % ^ amp; ! ~ ! = « » += -= *= /= %= ^= amp;= != «„ “» «„= “»= == != «= »= amp; amp; !! ++ – () []

Последние две операции – это вызов функции и индексирвание. Функция операция (за исключением operator new и operator delete; см. #7.2) должна быть или функцией членом, или получать по меньшей мере один классовый параметр. См. также #7.16. 8.5.12 Структуры

Структура есть класс, все члены которого общие. Это знчит, что

struct s (* ... *); эквивалентно

class s (* public: ... *);

Структура может иметь функции члены (включая конструктры и деструкторы). Базовй класс производной struct является открытым. Это значит, что

struct s : d (* ... *);

эквиволентно

class s : public b (* public: ... *);

8.5.13 Объединения

Объединение можно считать структурой, все объекты члены которой начинаются со смещения 0, и размер которой достаточен для содержания любого из ее объектов членов. В каждый момент времени в объединеии может храниться не больше одного из обектов членов. Объединение может иметь функции члены (включая конструкторы и деструкторы). Из объединения невозможно вывети класс. Объект класса с конструктором или деструктором не может быть членом объединения.

Объединение вида

union (* список_членов *);

называется безымянным объединением; оно определяет неменованный объект. Имена членов безымянного объединения долны отличаться от других имен в области видимости, в которой объединение описано; в этой области видимости они могут ипользоваться непосредственно, без обычного синтаксиса доступа к членам (#8.5). Например:

union (* int a; char* p; *); a = 1; // ... p = «asdf»;

Здесь a и p используются как простые переменные (не-члны), но так как они являются членами объединения, они имеют один и тот же адрес.

8.5.14 Поля Бит

Описатель_члена вида

идентификатор opt : константное_выражение

определяет поле; его длина отделяется от имени поля дветочием. Поля упаковываются в машинные целые; они не являются альтернативой слов. Поле , не влезающее в оставшееся в целом место, помещается в следующее слово. Поле не может быть шире слова. На некоторых машинах они размещаются справа налево, а на некоторых слева направо, см. #2.6.

Неименованные поля полезны при заполнении для согласовния внешне предписанных размещений (форматов). В особых слчаях неименованные поля длины 0 задают выравнивание следующго поля по границе слова. Не требуется аппаратной поддержки любых полей, кроме целых. Более того, даже целые поля могут рассматриваться как unsigned. По этим причинам рекомендуется описывать поля как unsigned. К полям не может применяться операция получения адреса amp;, поэтому нет указателей на поля.

Читать дальше
Тёмная тема

Шрифт:

Сбросить

Интервал:

Закладка:

Сделать


Мюррей Хилл читать все книги автора по порядку

Мюррей Хилл - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




C++ отзывы


Отзывы читателей о книге C++, автор: Мюррей Хилл. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
Большинство книг на сайте опубликовано легально на правах партнёрской программы ЛитРес. Если Ваша книга была опубликована с нарушениями авторских прав, пожалуйста, направьте Вашу жалобу на PGEgaHJlZj0ibWFpbHRvOmFidXNlQGxpYmtpbmcucnUiIHJlbD0ibm9mb2xsb3ciPmFidXNlQGxpYmtpbmcucnU8L2E+ или заполните форму обратной связи.
img img img img img