Когда вы должны использовать класс против структуры в C ++? - PullRequest
836 голосов
/ 10 сентября 2008

В каких случаях лучше использовать struct против class в C ++?

Ответы [ 24 ]

1 голос
/ 17 сентября 2018

Как уже отмечали другие

  • оба эквивалентны, кроме видимости по умолчанию
  • могут быть причины, по которым по той или иной причине приходится использовать одну или другую

Есть четкая рекомендация о том, когда использовать какую из Страуструпа / Саттера:

Использовать класс, если у класса есть инвариант; используйте struct, если члены данных могут варьироваться независимо

Однако имейте в виду, что не стоит отправлять декларацию sth. как класс (class X;) и определите его как struct (struct X { ... }). Он может работать на некоторых линкерах (например, g ++) и может не работать на других (например, MSVC), поэтому вы окажетесь в аду разработчиков.

0 голосов
/ 28 июля 2009

Я думал, что Structs был задуман как структура данных (например, массив данных с несколькими типами данных), а классы были предназначены для упаковки кода (например, коллекции подпрограмм и функций)

(

0 голосов
/ 10 сентября 2008

Я никогда не использую "struct" в C ++.

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

Кажется, что использование структур - это скорее синтаксическая индикация того, как будут использоваться данные, но я бы предпочел просто создать класс и попытаться сделать это явным в имени класса или в комментариях.

1007 * Е.Г. *

class PublicInputData {
    //data members
 };
0 голосов
/ 28 июля 2009

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

Например: чтение / запись данных из файлов и потоков сокетов и т. Д. Передача аргументов функции в структуре, где аргументов функции слишком много и синтаксис функции выглядит слишком длинным.

Технически нет большой разницы между классом и struture, кроме доступности по умолчанию. Более того, от того, как вы его используете, зависит стиль программирования.

...