Глава 14. Базовые концепции классов _ __ __________________335

Сходства классов и структур

Определения классов и структур синтаксически очень похожи. В простейшем случае единственное отличие между ними заключается в соответствующем ключевом слове — struct или class. Итак, класс INT из приведенного выше примера можно определить как структуру таким образом:

struct INT {

INT j; /* структура, содержащая целое

(это комментарий в стиле С) */ }

Как видите, различие состоит только в ключевом слове struct.

У классов и структур есть еще ряд общих свойств (не пугайтесь, если некоторые из терминов вам незнакомы): членами .и тех, и других могут быть как данные, так и функции; и те, и другие могут иметь специальные функции-члены, называющиеся конструкторами, деструкторами, 'конструкторами копий и операциями присваивания; как структуры, так и классы могут находиться друг с другом в иерархических взаимоотношениях.

Тем не менее структуры и классы — далеко не одно и то же. Некоторые отличия между ними весьма кардинальны с точки зрения объектно-ориентированной философии.

Различия между классами и структурами

Очевидное различие между структурами и классами обнаруживается уже в синтаксисе объявления объекта: экземпляры объектов классов объявляются в точности так же, как переменные базовых типов (за исключением того, что объявления объектов классов сопровождаются более бурной скрытой деятельностью), тогда как в объявлении экземпляра структуры необходимо указывать ключевое слово struct, например:

SOME_CLASS somelnstance; // объект класса SOME_CLASS struct SOME STRUCT aStruct; // а здесь нужно слово struct

Это, по большому счету, пустяки — всего лишь чуть более громоздкая нотация. Есть различия менее заметные, но более существенные.

Различия В доступности. Для разделения членов классов и структур пс степени их открытости внешнему окружению существует три уровня доступности (accessibility): закрытый (private) — наименее доступный, откры тый (public) — наиболее доступный и защищенный (protected) ~ лежащий где-то между предыдущими двумя (эта тема исчерпывающе изложена ниже в разделе "Спецификаторы доступа").