Size: a a a

2020 March 25

VU

Vadim Ushakov in pro.cxx
ARCHANGEL
парни, подскажите, зачем люди пишут struct вместо class? В моём понимании: struct, это когда там только поля, если есть методы, то нагляднее писать class. Может, ещё какие-то выигрыши есть в новых стандартах?
Может для совместимости с С, если есть старый код, который по каким-то причинам не переписан полностью на С++ и, например, используется в разных частях проекта, собирающихся компиляторами разных языков.
источник

ПК

Побитый Кирпич in pro.cxx
ARCHANGEL
в чём выигрышь такого подхода - делать структуры вместо классов, и есть ли он?
Ты показываешь, что у тебя тип это просто набор полей, без инвариантов (Data transfer object)
источник

A

ARCHANGEL in pro.cxx
Побитый Кирпич
Если на поля не наложены никакие условия, которые всегда должны выполняться (инварианты), то их можно писать в public секции
ага, а инкапсуляция как же? Так-то они часто не наложены - эти условия, но сокрытие данных то есть
источник

eb

ed braed in pro.cxx
ARCHANGEL
парни, подскажите, зачем люди пишут struct вместо class? В моём понимании: struct, это когда там только поля, если есть методы, то нагляднее писать class. Может, ещё какие-то выигрыши есть в новых стандартах?
Выигрыши только в читабельности. И очень вероятно что так дальше и останется, ибо существующий код ломать никто не будет.

Реальное же отличие между ними только в модификаторе доступа по умолчанию.
источник

A

ARCHANGEL in pro.cxx
Vadim Ushakov
Может для совместимости с С, если есть старый код, который по каким-то причинам не переписан полностью на С++ и, например, используется в разных частях проекта, собирающихся компиляторами разных языков.
такого нет, всё на 14 или 17 плюсах
источник

ПК

Побитый Кирпич in pro.cxx
ARCHANGEL
ага, а инкапсуляция как же? Так-то они часто не наложены - эти условия, но сокрытие данных то есть
Инкапсуляция сама по себе не нужна, только для поддержания инвариантов. Смотри тип Point2D. Будешь делать его члены x и y приватными?
источник

A

ARCHANGEL in pro.cxx
Побитый Кирпич
Инкапсуляция сама по себе не нужна, только для поддержания инвариантов. Смотри тип Point2D. Будешь делать его члены x и y приватными?
нет, для поинта не нужно
источник

ПК

Побитый Кирпич in pro.cxx
ARCHANGEL
нет, для поинта не нужно
Ну вот а методы у такого поинта вполне могут быть
источник

АК

Александр Караев in pro.cxx
ARCHANGEL
нет, для поинта не нужно
std::pair должен быть структурой или классом?
источник

A

ARCHANGEL in pro.cxx
Побитый Кирпич
Ну вот а методы у такого поинта вполне могут быть
а вот это уже плохо
источник

ПК

Побитый Кирпич in pro.cxx
ARCHANGEL
а вот это уже плохо
Нет обоснования почему плохо
источник

A

ARCHANGEL in pro.cxx
Александр Караев
std::pair должен быть структурой или классом?
имхо - есть методы, то это класс, нет - структура, потому пара больше структура
источник

АК

Александр Караев in pro.cxx
ARCHANGEL
имхо - есть методы, то это класс, нет - структура, потому пара больше структура
ну вот на "имхо" можно закончить обсуждение
источник

A

Alex in pro.cxx
ARCHANGEL
имхо - есть методы, то это класс, нет - структура, потому пара больше структура
В С++ класс и структура - одно и то же
источник

A

Alex in pro.cxx
кроме дефолтных спецификаторов доступа
источник

DF

Dollar Føølish in pro.cxx
В расте и у энумов могут быть методы например
источник

ПК

Побитый Кирпич in pro.cxx
ARCHANGEL
имхо - есть методы, то это класс, нет - структура, потому пара больше структура
В случае структуры методы это обычные функции, просто с формой вызова постфиксной
источник

A

ARCHANGEL in pro.cxx
я понял вашу позицию
источник

АК

Александр Караев in pro.cxx
Dollar Føølish
В расте и у энумов могут быть методы например
🤯
источник

eb

ed braed in pro.cxx
ARCHANGEL
имхо - есть методы, то это класс, нет - структура, потому пара больше структура
Это одна из религиозных войн в cpp, мой тебе совет - забей хер и просто поддерживай в своём коде единообразно как считаешь нужным.
Ни один адекватный программист на это даже внимания не обратит.
источник