Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
2 / 1 / 1
Регистрация: 15.09.2025
Сообщений: 49

В чем преимущество Структур над Классами?

20.09.2025, 07:54. Показов 5586. Ответов 18

Студворк — интернет-сервис помощи студентам
Добрый день.

Тема исследуется, и скорее всего - это сложный вопрос: В современных С++ в чем преимущество struct над class?

Спасибо.
---------
Ответа я не знаю, и специально выделил слова, чтоб обозначить направление поиска. Возможно, дополнительный вопрос поможет понять смысл:
C++
1
2
3
4
5
6
7
struct OldStruct
{
};
 
class NewStruct
{public:
};
Какие функциональные различия между OldStruct и NewStruct ?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.09.2025, 07:54
Ответы с готовыми решениями:

Ссылки и указатели - в чем преимущество одного над другим
Известно, что главной причиной появления ссылок в С++ было дать более безопасную альтернативу...

В чем преимущество list над вектором?
В чем преимущество list над вектором?

В чем преимущество trampoline hook над обычным hook?
Объясните пожалуйста в чем преимущество trampoline hook и hook? Никак не могу понять

18
фрилансер
 Аватар для Алексей1153
6466 / 5688 / 1131
Регистрация: 11.10.2019
Сообщений: 15,138
20.09.2025, 08:20
Лучший ответ Сообщение было отмечено SmallEvil как решение

Решение

JordanO2, разница только в спецификаторе доступа по умолчанию (для элементов и при наследовании). Больше отличий нет

Добавлено через 51 секунду
Цитата Сообщение от JordanO2 Посмотреть сообщение
В современных С++
и с самого начала так было
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6234 / 2943 / 1047
Регистрация: 01.06.2021
Сообщений: 10,957
20.09.2025, 10:35
Если про современный С++, то

C.2: Use class if the class has an invariant; use struct if the data members can vary independently
https://isocpp.github.io/CppCo... ependently

C.8: Use class rather than struct if any member is non-public
https://isocpp.github.io/CppCo... non-public
0
-610 / 35 / 0
Регистрация: 10.03.2025
Сообщений: 485
20.09.2025, 11:49
А я то думал, что класс создает новый объект, а структура типа небольшой базы или списка
типа список дней недели, месяцев в году
0
Модератор
Эксперт Java
 Аватар для alecss131
2881 / 1386 / 411
Регистрация: 11.08.2017
Сообщений: 4,423
Записей в блоге: 2
20.09.2025, 12:16
Цитата Сообщение от JordanO2 Посмотреть сообщение
Какие функциональные различия между OldStruct и NewStruct ?
В приведенном коде никаких, ну для классов получается писать чуть больше кода.

Добавлено через 1 минуту
Цитата Сообщение от Royal_X Посмотреть сообщение
то
Это все же рекомендации по использованию, а не различия. В плане функционала что структура, что класс с пабликом на все ведут себя идентично.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6234 / 2943 / 1047
Регистрация: 01.06.2021
Сообщений: 10,957
20.09.2025, 12:27
Цитата Сообщение от avedeo Посмотреть сообщение
типа список дней недели, месяцев в году
такое уже есть в стандартной библиотеке https://en.cppreference.com/w/cpp/chrono/c/tm.html

std::tm - это структура, состоящая из 9 или 11 членов-переменных. Такие структуры еще называются POD-структурами - (Plain Old Data). Они совместимы с языком С, эффективно используют память, быстро инициализируются и копируются, легко сериализуются и десериализуются, в том числе удобны для работы с бинарными данными, хорошо оптимизируются компиляторами.

Но в С++ структуры бывают не только такими. По возможностям, они фактически ничем не отличаются от классов.

Добавлено через 2 минуты
Цитата Сообщение от alecss131 Посмотреть сообщение
Это все же рекомендации по использованию, а не различия.
ну я про рекомендации и писал. Про различия Алексей1153 уже ответил выше, что тут уже добавлять?
1
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
20.09.2025, 16:09
Во первых: struct - это елемент совместимости с ЯП Си.
Второе, есть некоторые отличия поведенческие отличия, о всех лучше читать в стандарте.
Но вот тебе пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
struct SA{
   int a{};
};
struct SB : SA{};
struct SC : SB{};
 
class CA{
public:
   int a{};
};
class CB : CA{};
class CC : CB{};
 
int main(){
    std::cout << SC().a;
    std::cout << CC().a;
}
Но как ответили самым первым постом, принципиальной разницы нет.
http://en.cppreference.com/w/c... class.html
class-key - one of class, struct and union. The keywords class and struct are identical except for the default member access and the default base class access. If it is union, the declaration introduces a union type.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6234 / 2943 / 1047
Регистрация: 01.06.2021
Сообщений: 10,957
20.09.2025, 17:13
JordanO2, если у них единственное отличие "в спецификаторе доступа по умолчанию (для элементов и при наследовании)", то какие могут быть преимущества у одного перед другим?

Именно, поэтому может возникнуть вопрос, а что использовать в том или ином случае, если они мало чем отличаются? Ну чтобы немного помочь в этом направлении я привел рекомендации В чем преимущество Структур над Классами? Следовать им или нет - это уже твое дело. Но они написаны создателем языка С++ и секретарем комитета по стандартизации WG21.
0
2 / 1 / 1
Регистрация: 15.09.2025
Сообщений: 49
20.09.2025, 17:35  [ТС]
Цитата Сообщение от Royal_X Посмотреть сообщение
то какие могут быть преимущества у одного перед другим?
Вот именно. Про преимущества был вопрос. Тут же форум программистов.
И более того, в "лучшем ответе" (не на тот вопрос) видно, что упущена неожиданная особенность языка С++. И именно слово "преимущество" не дает ошибиться. Я сам только сейчас узнал.
0
фрилансер
 Аватар для Алексей1153
6466 / 5688 / 1131
Регистрация: 11.10.2019
Сообщений: 15,138
20.09.2025, 17:36
JordanO2, нет никаких преимуществ
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
20.09.2025, 18:00
Цитата Сообщение от JordanO2 Посмотреть сообщение
В правильном ответе должно присутствовать слово - "преимущество" (а не различия).
Тебе никто тут ничего не должен, это раз.
Два, ещё раз, не давай оценку другим и не навязывай своё восприятие другим.
И жизнь станет приятней.
А до тех пор...
0
599 / 421 / 137
Регистрация: 02.10.2008
Сообщений: 1,798
Записей в блоге: 1
21.09.2025, 12:34
Цитата Сообщение от Алексей1153 Посмотреть сообщение
JordanO2, нет никаких преимуществ
На мой взгляд только одно - совместимость с Си.
Например гуглим заголовок BMP-формата, сразу натыкаемся на СИшный - тупо копипастим в свой код и далее уже можем его использовать где угодно.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6234 / 2943 / 1047
Регистрация: 01.06.2021
Сообщений: 10,957
21.09.2025, 13:12
Цитата Сообщение от drfaust Посмотреть сообщение
На мой взгляд только одно - совместимость с Си.
Например гуглим заголовок BMP-формата, сразу натыкаемся на СИшный - тупо копипастим в свой код и далее уже можем его использовать где угодно.
Это очень сомнительное преимущество.
Это может быть преимуществом, когда мы хотим использовать плюсовый код в коде на С. Ведь, если мы даже натыкаемся на сишные коды со структурами, то они все равно будут без проблем работать в плюсовом коде. То есть, это "преимущество" только в случае использования плюсового кода в коде С, а не наоборот. Однако, при использовании плюсового кода на С, не думаю, что структуры/классы будут единственной проблемой, там придется все равно сделать немало правок, возможно, даже писать с нуля (в случае, если код написан на современном С++).
0
1478 / 491 / 73
Регистрация: 22.09.2023
Сообщений: 1,542
21.09.2025, 16:10
Цитата Сообщение от JordanO2 Посмотреть сообщение
Вот именно. Про преимущества был вопрос.
Это был вопрос из серии "вы уже перестали бить жену по утрам, да или нет?" То есть другие (правильные) варианты ответа не допускаются в принципе. А тем не менее правильный ответ совсем другой и он тут был неоднократно озвучен: "никаких преимуществ нет".
0
267 / 199 / 30
Регистрация: 26.11.2022
Сообщений: 869
21.09.2025, 20:24
Интересно классу не будет плохо если его обернут в #pragma pack 1 например.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
21.09.2025, 20:45
Цитата Сообщение от Aledveu Посмотреть сообщение
Интересно классу не будет плохо если его обернут в #pragma pack 1 например.
Майкрософт говорит что нет.
Цитата Сообщение от https://learn.microsoft.com/ru-ru/cpp/preprocessor/pack?view=msvc-170
Указывает выравнивание упаковки для элементов структуры, объединения и класса.
GCC тоже:
Цитата Сообщение от https://gcc.gnu.org/onlinedocs/gcc-4.4.4/gcc/Structure_002dPacking-Pragmas.html
For compatibility with Microsoft Windows compilers, GCC supports a set of #pragma directives which change the maximum alignment of members of structures (other than zero-width bitfields), unions, and classes subsequently defined. The n value below always is required to be a small power of two and specifies the new alignment in bytes.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6234 / 2943 / 1047
Регистрация: 01.06.2021
Сообщений: 10,957
21.09.2025, 20:59
Цитата Сообщение от Aledveu Посмотреть сообщение
#pragma pack
хоть и это поддерживается практически всеми компиляторами, это не является частью ISO C++

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

А для работы с бинарными данными для сериализации данных есть куча других способов
0
Модератор
Эксперт Java
 Аватар для alecss131
2881 / 1386 / 411
Регистрация: 11.08.2017
Сообщений: 4,423
Записей в блоге: 2
21.09.2025, 21:29
Цитата Сообщение от Royal_X Посмотреть сообщение
А для работы с бинарными данными для сериализации данных есть куча других способов
Ага, особенно когда работаешь с уже готовыми данными (которые без выравнивания хранятся) и читаешь их через стримы, без прагмы-пак никак не обойтись.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6234 / 2943 / 1047
Регистрация: 01.06.2021
Сообщений: 10,957
21.09.2025, 22:08
Цитата Сообщение от alecss131 Посмотреть сообщение
Ага, особенно когда работаешь с уже готовыми данными (которые без выравнивания хранятся) и читаешь их через стримы, без прагмы-пак никак не обойтись.
ну тут, да, использование оправдано, ведь ты не контролируешь формат данных, а остается следовать ему

но в остальных случаях это антипаттерн
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.09.2025, 22:08
Помогаю со студенческими работами здесь

В чем преимущество ReadFileEx/WriteFileEx над асинхронными версиями ReadFile/WriteFile
Мое почтение, джентльмены. Протестировал данные функции в асинхронном режиме, в скорости не...

В чем преимущество рекурсивных функций?
Насколько я понял, любую рекурсивную функцию можно реализовать итерационно. И при этом,...

В чем преимущество использования Pimpl?
Есть две реализации одной лабораторной. Первая с закрытым наследованием, вторая с использованием...

В чем преимущество приложений на С
В чём собственно особенность написание программ на С?Вить всё равно мы используем WINAPI,за что так...

В чем основное преимущество разделяемой памяти
Подскажите в чем основное преимуществоразделяемой памяти


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru