    Резюме 

    Объектно-ориентированное программирование, или ООП, помогает программистам 
уменьшить сложность программ и повторно использовать существующий код. 
    В C++ принципы ООП воплощены в классе — инструменте для создания новых 
типов данных, которые ведут себя подобно встроенным, таким, как int или 
double. Используйте объекты класса так же, как и объекты других типов. 
    Классы похожи на структуры, но в качестве членов могут иметь и функции.  
Классы инкапсулируют данные и функции, контролируя таким образом доступ к 
программным данным. 
    Следует использовать спецификатор доступа public для того, чтобы сделать 
члены класса открытыми для всех пользователей этого класса. Для того чтобы 
закрыть доступ к членам класса, следует использовать спецификатор доступа 
private. Только функции-члены класса могут иметь прямой доступ к закрытым 
данным-членам класса и вызывать закрытые функции-члены.   В главе 14 
вводится понятие третьего спецификатора доступа — protected. 
    Члены класса закрыты по умолчанию. Конечно, для ясности лучше использовать 
спецификатор доступа private явным образом для идентификации закрытых членов. 
    Функции-члены класса реализуются точно так же, как и обычные функции, но 
их заголовки включают в себя имя класса и оператор разрешения области 
видимости. Для класса Т функция-член, объявленная как void f(void);,
реализуется как void T::f(void);, указывая компилятору, что функция f() — член 
класса Т. 
    Каждая функция-член класса получает скрытый параметр с именем this, 
содержащий адрес объекта, для которого была вызвана эта функция. Для объекта х 
класса Т в функции-члене T::f() this ссылается на х. 
    Обычно   нет   необходимости   использовать   this   в    операторах,    
поскольку   функции-члены   имеют непосредственный доступ к членам объекта класса. 
    Функции  могут иметь объекты класса в  качестве  параметров,   которые 
могут быть параметрами  по значению, указателями или ссылками. Функции могут 
также возвращать объекты класса, хотя обычно они возвращают указатели или 
ссылки на них.	
    Тела встраиваемых функций-членов вставляются непосредственно в 
скомпилированный код.  Конечно, ключевое слово inline — скорее лишь указание 
компилятору, которое может быть принято к сведению, а может, и нет. Написание 
коротких встраиваемых функций — лучший способ предотвратить интерпретацию 
компилятором объявлений inline как обычных объявлений функций-членов. 
    Как и обычные функции, функции-члены могут быть перегружены. В классе 
может быть неограниченное число функций, имеющих одно и то же имя, при 
условии, что каждая функция отличается от других хотя бы   одним   параметром. 
  Перегруженные   функции-члены   помогают   сократить   число   имен,   
которые программистам приходится изобретать для выполнения похожих операций. 
Разумеется, перегруженные функции-члены отличаются одна от другой и должны быть 
реализованы индивидуально. 
    Функции-члены могут объявлять значения параметров по умолчанию для 
аргументов, которые можно не задавать. 
    В классе может быть объявлен один или несколько конструкторов для 
обеспечения автоматической инициализации объекта класса. Конструктор имеет 
такое же имя, как и класс, в котором он определен, и не имеет типа данных для 
возврата. Конструктор класса по умолчанию не имеет параметров. Прочие 
конструкторы могут иметь один или более параметров, обычно для обеспечения 
инициализации объектов класса  начальными  значениями.   Параметры 
конструктора могут быть  любого типа,   за  исключением класса, которому он 
принадлежит. C++ вызывает один из конструкторов при создании объекта класса. 
    В классе может быть объявлен деструктор (но только один). Деструктор 
обычно удаляет динамические переменные, на которые ссылаются данные-члены 
объекта класса, но может выполнять и другие функции очистки. C++ вызывает 
деструктор, когда объект класса выходит из области видимости или когда он удаляется. 
    Программы могут создавать массивы объектов классов. Класс должен иметь 
конструктор по умолчанию, который C++ вызывает по одному разу на каждый объект 
массива. Массивы могут также объявляться и инициализироваться с помощью явных 
обращений к перегруженным конструкторам. 
    При выходе массива объектов класса из области видимости C++ автоматически 
вызывает деструктор класса для каждого объекта массива. 
    Динамические массивы  объектов  класса  могут  создаваться  с  помощью  
new,   размещаться  в  куче и адресоваться указателями.   Конечно,  поскольку 
С и  C++  не делают различий между указателями и массивами, следует 
использовать delete[] (с пустыми скобками) а не delete (без скобок), для 
удаления динамических массивов объектов класса. Такая форма delete обеспечит 
вызов деструктора класса для каждого элемента в массиве. 

    334 Часть III. Программирование на ANSI C++ 
