... чем отличается от class, кроме того, что по умолчанию мемберы в одном случае паблик, а в другом приват. Если только в этом и вся разница, то почему ж тогда не использовать везде и всюду struct?
Приведите примеры, когда задачу можно решить только при помощи объявлений class.
> ... чем отличается от class, кроме того, что по умолчанию > мемберы в одном случае паблик, а в другом приват. Если > только в этом и вся разница, то почему ж тогда не > использовать везде и всюду struct? > > Приведите примеры, когда задачу можно решить только при > помощи объявлений class. > > ПС. Сам никогда даже не задумывался про это. :)))
struct - наследие обычного C: поддерживается, но считается устаревшим. Человек, всюду в новых проектах на C++ применяющий struct вместо class - скорее всего, неверно выбрал язык программирования (когда объектно-ориентированная модель не нужна и вполне достаточно обычного C), или не понимает одного из базовых принципов ООП (публичные интерфейсы и скрытие всего остального).
Добавлю, что struct чаще всего используется просто для того, чтобы подчеркнуть01.03.05 11:51 Автор: amirul <Serge> Статус: The Elderman
Что это просто набор данных. И чаще всего для совместимости со старым кодом (например для совместимости с WinAPI)
> > ... чем отличается от class, кроме того, что по > умолчанию > > мемберы в одном случае паблик, а в другом приват. Если Более того, они только ПО УМОЛЧАНИЮ паблик и приват. В большинстве случаев даже при объявлении класса принято сразу же ставить ключевые слова public или private.
> > только в этом и вся разница, то почему ж тогда не > > использовать везде и всюду struct? Здесь дело только в названии, ИМХО. Слово class подчеркивает что это отдельный ТИП данных. А struct - просто набор каких либо базовых.
И еще одна хитрость01.03.05 12:04 Автор: leo <Леонид Юрьев> Статус: Elderman
Для многих компиляторов (в частности для gcc 3) объявления 'extern "C" struct {' и 'class { public:' - две разные вещи. Компилятор может по-разному геренировать код при управлении экземплярами этих типов. Например 'struct' возвращаемый из функции будет по-возможности втиснут в регистры, а 'class' с легкостью записан по адресу (возможно на стеке) сформированному вызывающей функцией.
[C++] Всё же о стандарте С++ я пытаюсь понять ;))01.03.05 14:50 Автор: void <Grebnev Valery> Статус: Elderman
> Для многих компиляторов (в частности для gcc 3) объявления > 'extern "C" struct {' и 'class { public:' - две разные > вещи. Компилятор может по-разному геренировать код при > управлении экземплярами этих типов. Например 'struct' > возвращаемый из функции будет по-возможности втиснут в > регистры, а 'class' с легкостью записан по адресу (возможно > на стеке) сформированному вызывающей функцией.
Вот это уже ближе... Кстати, а почему? Весьма интересно.
Но меня больше заинтересовала сторонастандартаС++. Парадокс в том, что практически, в несложном коде всё можно сделать со struct. Работает всё, включая акссесоры.
ПС. Не уверен про STL
[C++] Стандарт говорит о том что struct и class совершенно идентичны01.03.05 15:07 Автор: amirul <Serge> Статус: The Elderman
> > Вот это уже ближе... Кстати, а почему? Весьма > интересно. > > Но меня больше заинтересовала сторонастандартаС++. > > За исключением дефолтового сокрытия для членов. > > > Парадокс в том, что практически, в несложном коде всё > можно > > сделать со struct. Работает всё, включая акссесоры. > > Ну дык, в union-ах тоже работает перегрузка операторов, > конструкторы/деструкторы (кажется даже виртуальные функции > можно запихнуть). > > > ПС. Не уверен про STL > Э-э-э. В чем именно не уверен?
Например, можно ли создать веткор для "класса" (шо описывается struct), с описанием деструктора и конструкторов, включая конструктор копирования. Допускает ли вообще использование struct включение деструктора.
Да01.03.05 16:06 Автор: amirul <Serge> Статус: The Elderman
> > Ну дык, в union-ах тоже работает перегрузка > операторов, > > конструкторы/деструкторы (кажется даже виртуальные > функции > > можно запихнуть).
> Например, можно ли создать веткор для "класса" (шо > описывается struct), с описанием деструктора и > конструкторов, включая конструктор копирования. Допускает > ли вообще использование struct включение деструктора. Это в C++ допускает даже union.
Выдает ворнинг, но отлично компилирует. Стандарт говорит, что семантически struct и class совершенно идентичны, за исключением дефолтовой видимости членов
Да, только разработчики компилеров иногда об этом забывают...02.03.05 04:47 Автор: void <Grebnev Valery> Статус: Elderman
В первом вызове действительно создается функтор. Но остальные вызовы показывают, что можно использовать ЛЮБОЙ объект к которому применим оператор (). В том числе и функцию и указатель на функцию.
Короче, в списке аргументов шаблона используется не то слово class, которое используется для задания структуры (в терминах C++ - оно перегружено - overloaded). Например ключевое слово static перегружено как минимум пятью разными значениями и ничего - работает :-).
> ПС. Такой вопрос может быть на интервью, при поиске работы. Успехов на собеседовании