Чем class отличается от struct? Когда использовать одно, а когда другое?
Ответ
Отличия
В С++ классом называются типы объявленные с помощью class, struct или union
Это означает что в С++ есть только классы, и все правила для class и struct одинаковы, за исключением случаев где отличия указаны явно.
Отличий class от struct всего два
Member access control [class.access]
Члены класса, определенного с помощью ключевого слова class, по умолчанию являются private. Члены класса, определенного с помощью ключевого слова struct или union, по умолчанию являются public
Accessibility of base classes and base class members [class.access.base]
При отсутствии спецификатора доступа (т.е. private/protected/public) у базового класса, базовый класс будет public если класс определен с помощью struct и private если класс определен с помощью class
(Хотя union и является классом, он имеет много других отличий от class и struct, что выходит за рамки этого вопроса.)
Использование
Есть популярное мнение, что для "расово правильных ООП классов" надо использовать только class, а для структур данных - только struct, и еще у struct не должно быть методов. Это не более чем вкусовщина, и подобные вещи должны быть закреплены в руководствах по стилю кодирования, как например это сделано в Google C++ Style Guide
В коротких примерах кода, предпочтительнее использовать struct, и не использовать private/public, если они не относятся к сути проблемы.
Комментариев нет:
Отправить комментарий