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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 61, средняя оценка - 4.79
gexeg
0 / 0 / 0
Регистрация: 22.06.2010
Сообщений: 10
#1

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

01.07.2010, 22:17. Просмотров 8269. Ответов 13
Метки нет (Все метки)

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

Чем отличаются структуры для наследования интерфейса от структур для наследования реализаций? - C++
Дорогие программисты, во первых, хочу поздравить вас с Наступающим новым Годом! Я к вам обращаюсь с маленькой просьбой. Я никак не могу...

чем отличаются static_cast от - C++
Привет всем! чем отличаются явное приведения типа long tmp = static_cast<long>(45.6); от long tmp = long(54.34); ?

Чем отличаются операторы while и for? - C++
Добрый вечер, чем отличается while от for, в каких случаях нужно использовать while а в каких for?

Чем отличаются компиляторы? - C++
Здравствуйте. 32-bit / 64-bit -- Понятно. Чем отличается threads-win32 от threads-posix, dwarf от sjlj?

Чем отличаются эти функции? - C++
Аргумент в первой функции передается по значению. Это значит что создается копия переменной. А вот остальные не понимаю. void f1(int...

Чем отличаются указатели от ссылок? - C++
Как я понимаю указатель,он хранит адрес переменной,а ссылка просто берёт значение переменной?Привидите примерчик какой=)

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
01.07.2010, 22:20 #2
Доступом онли.
0
gexeg
0 / 0 / 0
Регистрация: 22.06.2010
Сообщений: 10
01.07.2010, 22:22  [ТС] #3
Цитата Сообщение от Lavroff Посмотреть сообщение
Доступом онли.
Ну то есть то что я и сказал? (по умолчанию все члены public)

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

Тогда получается структуры просто обеспечивают совместимость с Си.
Именно
2
gexeg
0 / 0 / 0
Регистрация: 22.06.2010
Сообщений: 10
01.07.2010, 22:26  [ТС] #5
понятно. спасибо.
0
Nick Alte
Эксперт С++
1637 / 1009 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
01.07.2010, 22:43 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Синтаксически они мало отличаются, но тем не менее существует хорошая традиция оформлять все ООП-объекты в классы, а структурами пользоваться для описания пассивных структур данных, не имеющих (или имеющих минимальный набор) методов, желательно POD. Соблюдение этой рекомендации поможет создавать более читаемый и доступный для понимания код, что немаловажно.
0
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
01.07.2010, 23:12 #7
Цитата Сообщение от Lavroff Посмотреть сообщение
Доступом онли.
вообщем да, хоть конструкторы объявляй, хоть операторы перегужай, наследовать только не пробовал
0
gexeg
0 / 0 / 0
Регистрация: 22.06.2010
Сообщений: 10
01.07.2010, 23:21  [ТС] #8
Цитата Сообщение от alex_x_x Посмотреть сообщение
вообщем да, хоть конструкторы объявляй, хоть операторы перегужай, наследовать только не пробовал
и наследование тоже работает.

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

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

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

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

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

В Си структуры не могут быть пустыми (хотя расширения языка типа Gnu C позволяют это сделать)
1. можно создавать объекты структуры или класса без конструктора.
2. в c++ структуры могут быть пустыми (по крайней мере у меня это работает, незнаю насчет стандартов).
0
Vourhey
Почетный модератор
6481 / 2256 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
02.07.2010, 16:03 #13
Цитата Сообщение от Evg Посмотреть сообщение
Экземпляр класса без конструктора содавать нельзя
Можно. Никакого конструктора не будет вызываться при создании объекта. Совсем недавно смотрел дизассемблерный листинг создания объекта, в котором не был определен конструктор (visual C++ 6.0) - вызова функции нигде не было.
0
Evg
Эксперт CАвтор FAQ
17802 / 6008 / 387
Регистрация: 30.03.2009
Сообщений: 16,512
Записей в блоге: 26
02.07.2010, 16:08 #14
Цитата Сообщение от gexeg Посмотреть сообщение
2. в c++ структуры могут быть пустыми (по крайней мере у меня это работает, незнаю насчет стандартов).
Я про Си писал, что не могут.

Цитата Сообщение от Vourhey Посмотреть сообщение
Можно. Никакого конструктора не будет вызываться при создании объекта. Совсем недавно смотрел дизассемблерный листинг создания объекта, в котором не был определен конструктор (visual C++ 6.0) - вызова функции нигде не было.
И вправду. Только вот я много раз натыкался на то, что приходилось писать пустой конструктор, потому как компилятор ругался. Надо подумать, в каких случаях это было
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2010, 16:08
Привет! Вот еще темы с ответами:

Чем отличаются операторы вывода? - C++
Чем отличаются операторы вывода cout и printf и какой более перспективно использовать? ;)

Чем отличаются dynamic_cast и static_cast? - C++
если можно пример напишите

Чем отличаются ф-ии GlobalAllocPtr() и malloc()? - C++
Здрасьте! Чем отличаются ф-ии GlobalAllocPtr() и malloc()? Спасибо!

Чем отличаются знаковые и беззнаковые типы? - C++
Здравствуйте. Все не могу понять, чем отличаются знаковые и беззнаковые типы? И для каких типов они есть? short int это тоже самое, что и...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
02.07.2010, 16:08
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru