Это довольно специфично для языка. Похоже, вы смешиваете значительную долю C ++ и C #, оба из которых очень разные языки (несмотря на поверхностное сходство синтаксиса).
В C ++ struct
s действительно по умолчанию public
видимость члена, в то время как class
по умолчанию private
. В C # struct
используется для объявления типов значений, которые передаются по значению (, обратите внимание, что выделение стека - это деталь реализации, а не контракт ).
Как правило, оба языка имеют одно и то же представление о том, что struct
и class
должны представлять : struct
для простых структур данных, которые выполняют чуть больше, чем хранение данных, в то время как классы имеют состояние и методы для манипулирования им. Они используются для построения объектов в каком-то конкретном или абстрактном смысле, в то время как структуры данных - это просто: данные в структурированной форме; им не нужно много делать с этими данными или даже знать, что это за данные. По сути, они тупые и им все равно.
Но именно так и думали дизайнеры языка, что их следует использовать. Люди хороши в неправильном использовании вещей, поэтому не каждый struct
, который вы видите, может быть простой, глупой структурой данных, и не каждый class
, который вы видите, может быть полноценным классом с множеством методов и тому подобным. Это просто соглашение, и если люди следуют ему, другие могут взглянуть на код и увидеть: «О, хорошо, это struct
, поэтому я не ожидаю особой логики здесь и перейду к более интересным вещам». Это может сработать ... в теории.
ETA: Поскольку вы упомянули в комментарии, что вы особенно заинтересованы в PHP или Java: оба языка не имеют какие-либо различия на уровне синтаксиса или языка class
или struct
, поэтому ваш вопрос кажется мне немного странным. И в Java, и в PHP вы моделируете вещи как классы, независимо от того, являются ли они просто структурами данных без логики или фактическими классами со всем, что есть.