Форум программистов, компьютерный форум CyberForum.ru

Вопрос. Чем отличаются структуры в С++ от классов в C++ - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 61, средняя оценка - 4.79
gexeg
0 / 0 / 0
Регистрация: 22.06.2010
Сообщений: 10
01.07.2010, 22:17     Вопрос. Чем отличаются структуры в С++ от классов в C++ #1
Приветствую.
Никак не могу понять чем же все таки отличаются структуры от классов, кроме того что в структуре по умолчанию все члены являются общедоступными (public).
Помогите понять
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.07.2010, 22:17     Вопрос. Чем отличаются структуры в С++ от классов в C++
Посмотрите здесь:

Чем отличаются ф-ии GlobalAllocPtr() и malloc()? C++
Чем отличаются указатели от ссылок? C++
Чем отличаются компиляторы? C++
чем отличаются static_cast от C++
Чем отличаются dynamic_cast и static_cast? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
01.07.2010, 22:20     Вопрос. Чем отличаются структуры в С++ от классов в C++ #2
Доступом онли.
gexeg
0 / 0 / 0
Регистрация: 22.06.2010
Сообщений: 10
01.07.2010, 22:22  [ТС]     Вопрос. Чем отличаются структуры в С++ от классов в C++ #3
Цитата Сообщение от Lavroff Посмотреть сообщение
Доступом онли.
Ну то есть то что я и сказал? (по умолчанию все члены public)

Тогда получается структуры просто обеспечивают совместимость с Си.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
01.07.2010, 22:24     Вопрос. Чем отличаются структуры в С++ от классов в C++ #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от gexeg Посмотреть сообщение
Ну то есть то что я и сказал? (по умолчанию все члены public)

Тогда получается структуры просто обеспечивают совместимость с Си.
Именно
gexeg
0 / 0 / 0
Регистрация: 22.06.2010
Сообщений: 10
01.07.2010, 22:26  [ТС]     Вопрос. Чем отличаются структуры в С++ от классов в C++ #5
понятно. спасибо.
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
01.07.2010, 22:43     Вопрос. Чем отличаются структуры в С++ от классов в C++ #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Синтаксически они мало отличаются, но тем не менее существует хорошая традиция оформлять все ООП-объекты в классы, а структурами пользоваться для описания пассивных структур данных, не имеющих (или имеющих минимальный набор) методов, желательно POD. Соблюдение этой рекомендации поможет создавать более читаемый и доступный для понимания код, что немаловажно.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
01.07.2010, 23:12     Вопрос. Чем отличаются структуры в С++ от классов в C++ #7
Цитата Сообщение от Lavroff Посмотреть сообщение
Доступом онли.
вообщем да, хоть конструкторы объявляй, хоть операторы перегужай, наследовать только не пробовал
gexeg
0 / 0 / 0
Регистрация: 22.06.2010
Сообщений: 10
01.07.2010, 23:21  [ТС]     Вопрос. Чем отличаются структуры в С++ от классов в C++ #8
Цитата Сообщение от alex_x_x Посмотреть сообщение
вообщем да, хоть конструкторы объявляй, хоть операторы перегужай, наследовать только не пробовал
и наследование тоже работает.

Страуструп вообще не различает их (по методу изложения материала).. поэтому задумался в чем же различия.

по началу я думал что способом передачи в качестве параметров, объекты структуры - через стэк, объекты класса через указатель на кучу (как в c#)... дизассембирование показало что разницы нет, передача происходит через стэк
Vourhey
Почетный модератор
6469 / 2244 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
01.07.2010, 23:52     Вопрос. Чем отличаются структуры в С++ от классов в C++ #9
Цитата Сообщение от gexeg Посмотреть сообщение
по началу я думал что способом передачи в качестве параметров, объекты структуры - через стэк, объекты класса через указатель на кучу (как в c#)... дизассембирование показало что разницы нет, передача происходит через стэк
Очень забавно звучит.
Через стек? Допустим, через стек.
Указатель на кучу? Хе. Ну он же тоже должен передаваться в функцию как-то ))) Либо через регистр (fastcall), либо через (cdecl, stdcall). Или у тебя была версия, указатель на кучу передается по какому-то новому пути без стека и регистров?
То, как данные передаются, от их типа не зависит.

насколько я знаю, кроме сокрытия, еще разница в том, как идет наследование по умолчанию. public в одном случае, private в другом.
gexeg
0 / 0 / 0
Регистрация: 22.06.2010
Сообщений: 10
02.07.2010, 08:25  [ТС]     Вопрос. Чем отличаются структуры в С++ от классов в C++ #10
Цитата Сообщение от Vourhey Посмотреть сообщение
Очень забавно звучит.
Через стек? Допустим, через стек.
Указатель на кучу? Хе. Ну он же тоже должен передаваться в функцию как-то ))) Либо через регистр (fastcall), либо через (cdecl, stdcall). Или у тебя была версия, указатель на кучу передается по какому-то новому пути без стека и регистров?
То, как данные передаются, от их типа не зависит.

насколько я знаю, кроме сокрытия, еще разница в том, как идет наследование по умолчанию. public в одном случае, private в другом.
ну не трудно было догадаться что через стэк означает копирование структуры в стэк (ее членов).. а через указатель на кучу.. означает что передается указатель на кучу через стэк...
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16834 / 5255 / 323
Регистрация: 30.03.2009
Сообщений: 14,152
Записей в блоге: 26
02.07.2010, 15:27     Вопрос. Чем отличаются структуры в С++ от классов в C++ #11
Структуры в Си++ могут не иметь конструктора. В этом случае при создании экземпляра структуры все поля окажутся неинициализированными. Экземпляр класса без конструктора содавать нельзя

В Си структуры не могут быть пустыми (хотя расширения языка типа Gnu C позволяют это сделать)
gexeg
0 / 0 / 0
Регистрация: 22.06.2010
Сообщений: 10
02.07.2010, 15:52  [ТС]     Вопрос. Чем отличаются структуры в С++ от классов в C++ #12
Цитата Сообщение от Evg Посмотреть сообщение
Структуры в Си++ могут не иметь конструктора. В этом случае при создании экземпляра структуры все поля окажутся неинициализированными. Экземпляр класса без конструктора содавать нельзя

В Си структуры не могут быть пустыми (хотя расширения языка типа Gnu C позволяют это сделать)
1. можно создавать объекты структуры или класса без конструктора.
2. в c++ структуры могут быть пустыми (по крайней мере у меня это работает, незнаю насчет стандартов).
Vourhey
Почетный модератор
6469 / 2244 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
02.07.2010, 16:03     Вопрос. Чем отличаются структуры в С++ от классов в C++ #13
Цитата Сообщение от Evg Посмотреть сообщение
Экземпляр класса без конструктора содавать нельзя
Можно. Никакого конструктора не будет вызываться при создании объекта. Совсем недавно смотрел дизассемблерный листинг создания объекта, в котором не был определен конструктор (visual C++ 6.0) - вызова функции нигде не было.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2010, 16:08     Вопрос. Чем отличаются структуры в С++ от классов в C++
Еще ссылки по теме:

Чем отличаются операторы вывода? C++
C++ Чем отличаются эти функции?
чем отличаются структуры для наследования интерфейса, от структур, для наследования реализаций C++

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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16834 / 5255 / 323
Регистрация: 30.03.2009
Сообщений: 14,152
Записей в блоге: 26
02.07.2010, 16:08     Вопрос. Чем отличаются структуры в С++ от классов в C++ #14
Цитата Сообщение от gexeg Посмотреть сообщение
2. в c++ структуры могут быть пустыми (по крайней мере у меня это работает, незнаю насчет стандартов).
Я про Си писал, что не могут.

Цитата Сообщение от Vourhey Посмотреть сообщение
Можно. Никакого конструктора не будет вызываться при создании объекта. Совсем недавно смотрел дизассемблерный листинг создания объекта, в котором не был определен конструктор (visual C++ 6.0) - вызова функции нигде не было.
И вправду. Только вот я много раз натыкался на то, что приходилось писать пустой конструктор, потому как компилятор ругался. Надо подумать, в каких случаях это было
Yandex
Объявления
02.07.2010, 16:08     Вопрос. Чем отличаются структуры в С++ от классов в C++
Ответ Создать тему
Опции темы

Текущее время: 13:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru