В “старом” классическом языке С в структуры можно было включать в качестве элементов только переменные, т. е. поля. В С++ возможности структуры расширены таким образом, что классы и структуры тесно взаимосвязаны. Структура, как и класс, может содержать не только данные, но и код, т. е. функции, манипулирующие этими данными. Структура может иметь конструктор и деструктор.
Единственное отличие между рассматриваемыми типами связано с атрибутами (спецификаторами) доступа к их элементам.
Как видно из предыдущих параграфов, никакой атрибут доступа, ни public, ни private для полей структуры мы не писали. Очевидно, что мы использовали элементы структуры в других функциях, не являющихся членами структуры. Методы в структурах мы не записывали, т. е. этот тип использовали в стиле языка С. Отсюда можно сделать вывод, что по умолчанию члены структуры имеют атрибут доступа public. Благодаря этому мы смогли использовать члены структуры в функциях, не принадлежащих структурам. При этом использовали составное имя, включающее операции “.” (точка) или “->” (стрелка). Если этот умалчиваемый атрибут не изменить, то нарушается принцип инкапсуляции объектно-ориентированного программирования. По этой причине при использовании объектно-ориентированного стиля программировании для полей структуры и частных методов следует явно указать атрибут private. И наоборот, общедоступные методы можно поместить в начало структуры без явного указания ключевого слова public.
Для сравнения напомним, что члены класса в отличие от структуры по умолчанию имеют атрибут доступа private, а явно необходимо записывать ключевое слово public. “Забегая в третий семестр”, заметим, чтоможно объявить ссылку на объект как синоним другого имени и указатель на объект. В последнем случае для доступа к общедоступным членам класса, как и для структуры, используется операция “->” (стрелка).