Когда классы, а когда структуры?

Изучая классы и объекты c++ появился простой вопрос: в чём же преимущество классов над структурами? Для чего они нужны? Ведь, можно обойтись простыми структурами, которые позволяют всё хранить в одном месте.


Ответы (4 шт):

Автор решения: n1tr0xs

Если кратко:
Структуры позволяют собрать даннные в одном месте.
Классы позволяют собрать данные и методы их обработки в одном месте.

→ Ссылка
Автор решения: AR Hovsepyan

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

Каждый стиль требует своего . Для объектно-ориентированного стиля концептуальная база - это объектная модель. Ключевое слово class выражает умонастроение и способ восприятия объектно ориентированного стиля и используется для построения объектно_ориентированной модели. И для класса важны выбор правильного набора абстракции_наблюдаемое поведение объекта, но также и инкапсуляция данных, которые занимаются внутренним устройством и, которые не нужны клиентам класса(из этих соображений поля класса по умолчанию закрыты).

Структура есть набор любых данных. Например, можно создать структуру из часов, измерительных приборов, сидений, крыльев и двигателей. Но как можно воспринять, что это самолет? Поэтому такая структура не будет выражен как класс. Самолет абстрагируется как воздушное транспортное средство, имеющий и умеющий конкретные концептуальные границы, отличающие его от других объектов. В общем случаи: класс есть инструкция для создания некоторой осмысленной сущности, который не может быть просто "мешком битов", а структура в ООП воспринимается и используется как просто набор данных ("мешок битов").

Так что классы не имеют никакого преимущества по отношению со структурами, а лишь выражают умонастроение ООП с соответствующими требованиями и восприятием к нему.

→ Ссылка
Автор решения: HolyBlackCat

В C++ нет структур, есть только классы. Ключевое слово struct создает класс.

Разница только в том, что в struct по умолчанию доступ к полям и родителям public, а в class - private.

Правильнее спросить, зачем делать функции членами класса.

Никаких принципиально новых возможностей это не дает, только удобство:

  • Можно прятать поля класса, и оставлять торчать наружу только функции, которые меняют их только так, как вам надо.

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

  • Некоторые функции обязаны быть членами: конструкторы, деструкторы, операторы присваивания, виртуальные функции...

  • Все функции в одном месте, удобно. Нельзя добавить функцию-член откуда-то снаружи тела класса.

→ Ссылка
Автор решения: svpra

Если говорить конкретно про С++, то в С++ struct создаёт class. Но есть два отличия, (когда класс или структура указаны явно):

  1. Члены class по умолчанию приватные, а вот члены struct - публичные
  2. У базового класса базовый класс будет public, если он объявлен с помощью struct, и private, если с помощью class соотечественно.

Все это дело легко изменяется модификаторами доступа, тут никаких ограничений нет :)

P.S вроде на ru.stackoverflow уже проскакивал подобный вопрос. Как найду его - напишу ссылку

P.P.S. ссылку таки нашел: https://ru.stackoverflow.com/questions/420635/Чем-class-отличается-от-struct

→ Ссылка