Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Отличие Class от Struct
|
|||
|---|---|---|---|
|
#18+
На первый взгляд почти идентичны ? Когда правильно использовать Class а когда Struct ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 20:05 |
|
||
|
Отличие Class от Struct
|
|||
|---|---|---|---|
|
#18+
semen.s.semen, Нет никакой разницы кроме того что в struct все члены по умолчанию public, а в class - по умолчанию private. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 20:25 |
|
||
|
Отличие Class от Struct
|
|||
|---|---|---|---|
|
#18+
struct удобно использовать когда у вас код в стиле C - т.е. нет методов/конструкторов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 20:27 |
|
||
|
Отличие Class от Struct
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, есть еще одно небольшое отличие - присутствие/отсутствие по умолчанию указателя на VTBL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 21:26 |
|
||
|
Отличие Class от Struct
|
|||
|---|---|---|---|
|
#18+
rdb_devAnatoly Moskovsky, есть еще одно небольшое отличие - присутствие/отсутствие по умолчанию указателя на VTBL. Расскажите плиз по подробнее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 21:29 |
|
||
|
Отличие Class от Struct
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskystruct удобно использовать когда у вас код в стиле C - т.е. нет методов/конструкторов. Или когда трейты/метафункции пишешь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 21:41 |
|
||
|
Отличие Class от Struct
|
|||
|---|---|---|---|
|
#18+
rdb_devAnatoly Moskovsky, есть еще одно небольшое отличие - присутствие/отсутствие по умолчанию указателя на VTBL. Если виртуальных методов нет - никакой VTBL не создаётся ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 21:58 |
|
||
|
Отличие Class от Struct
|
|||
|---|---|---|---|
|
#18+
rdb_devесть еще одно небольшое отличие - присутствие/отсутствие по умолчанию указателя на VTBL. Нет такого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 21:59 |
|
||
|
Отличие Class от Struct
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, да... Похоже, я забыл о реальном назначении и причинах использования __declspec(novtable) . Каюсь, был неправ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 22:42 |
|
||
|
Отличие Class от Struct
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskystruct удобно использовать когда у вас код в стиле C - т.е. нет методов/конструкторов.или наоборот, когда нет данных, а все методы - публичные и, возможно, абстрактные ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2018, 00:13 |
|
||
|
Отличие Class от Struct
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskysemen.s.semen, Нет никакой разницы кроме того что в struct все члены по умолчанию public, а в class - по умолчанию private. Есть ещё одно отличие -- наследование от предков в struct по умолчанию public , в class по умолчанию private . Т.е. в struct можно не писать Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2018, 10:41 |
|
||
|
Отличие Class от Struct
|
|||
|---|---|---|---|
|
#18+
rdb_devAnatoly Moskovsky, есть еще одно небольшое отличие - присутствие/отсутствие по умолчанию указателя на VTBL. Нет, такого отличия нет. Указатель на vtbl в любом классе или структуре появляется только с появлением хотя бы одного виртуального метода в иерархии. Такие классы/структуры с указателем на vtbl называются полиморфными классами, а без него -- неполиморфными. И они отличаются друг от друга в частности ещё и возможностью применения к ним RTTI и dynamic_cast. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2018, 10:45 |
|
||
|
Отличие Class от Struct
|
|||
|---|---|---|---|
|
#18+
MasterZiv, меня сбила с толку память о наличии __declspec(novtable). Забыл, что обычно эту директиву применяют к чисто абстрактным классам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2018, 11:07 |
|
||
|
Отличие Class от Struct
|
|||
|---|---|---|---|
|
#18+
rdb_devMasterZiv, меня сбила с толку память о наличии __declspec(novtable). Забыл, что обычно эту директиву применяют к чисто абстрактным классам. Во-первых, это не стандарт, а расширение какое-то, во-вторых, как же абстрактному классу-то и без vtable ? P.S. почитал про это -- вообще хрень какая-то... Но и потом -- оно НЕ удаляет vtable, она удаляет лишь использование этого vtable (инициализацию указателя) из конструктора и деструктора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2018, 11:22 |
|
||
|
Отличие Class от Struct
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskysemen.s.semen, Нет никакой разницы кроме того что в struct все члены по умолчанию public, а в class - по умолчанию private. Можно разве что дополнить. Еще есть union, у него тоже по молчанию public как и у struct. И тоже могут быть и методы, и виртуальные и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2018, 12:42 |
|
||
|
Отличие Class от Struct
|
|||
|---|---|---|---|
|
#18+
MasterZivВо-первых, это не стандарт, а расширение какое-то, во-вторых, как же абстрактному классу-то и без vtable ? P.S. почитал про это -- вообще хрень какая-то... Но и потом -- оно НЕ удаляет vtable, она удаляет лишь использование этого vtable (инициализацию указателя) из конструктора и деструктора.Так нафига абстрактному классу иметь таблицу виртуальных методов, если он никогда не инстанцируется, а используется исключительно для описания интерфейса и наследования? Компилятору достаточно знать только порядок объявлениях виртуальных методов этого класса, а vtable ему без надобности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2018, 13:05 |
|
||
|
Отличие Class от Struct
|
|||
|---|---|---|---|
|
#18+
rdb_devКомпилятору достаточно знать только порядок объявлениях виртуальных методов этого класса, а vtable ему без надобности.Насколько я знаю, никто не запрещает иметь реализацию метода в абстрактном классе. И, насколько я понимаю, как минимум, деструктор абстрактного класса будет виртуальным. P.S. Оголтелая оптимизанщина - тревожный звоночек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2018, 13:31 |
|
||
|
Отличие Class от Struct
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovНасколько я знаю, никто не запрещает иметь реализацию метода в абстрактном классе. И, насколько я понимаю, как минимум, деструктор абстрактного класса будет виртуальным.Иметь реализацию виртуального деструктора, конечно можно - никто не запрещает... Но если класс исключительно интерфейсный, то занафига она нужна? Предположим, у тебя пол сотни виртуальных методов (я, конечно, прикалываюсь) и размещение vtable на моделях ILP64/LP64/LLP64 добавит к бинарному модулю почти пол килобайта. А если таких интерфейсных классов не один и не два? У меня в одном маленьком проекте было семь интерфейсных классов, в каждом из которых порядка 15 - 20 чисто виртуальных методов. Basil A. SidorovP.S. Оголтелая оптимизанщина - тревожный звоночек.Вполне возможно... У GCC, кстати, я ничего похожего не заметил (может плохо смотрел). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2018, 14:16 |
|
||
|
Отличие Class от Struct
|
|||
|---|---|---|---|
|
#18+
rdb_devПредположим, у тебя пол сотни виртуальных методов (я, конечно, прикалываюсь) и размещение vtable на моделях ILP64/LP64/LLP64 добавит к бинарному модулю почти пол килобайта.Физический минимум единицы хранения на диске - те самые "полкило" о которых вы так печётесь. Простое создание записи о файле в каталоге "отъедает" десятки-сотни байт. К чему всё это крохоборство??? Может, потратить время с пользой и улучшить дизайн проекта или сократить сроки выпуска?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2018, 14:56 |
|
||
|
Отличие Class от Struct
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovФизический минимум единицы хранения на диске - те самые "полкило" о которых вы так печётесь. Простое создание записи о файле в каталоге "отъедает" десятки-сотни байт.Если в сыром формате, то да, но множество файловых систем используют кластера по 4, 8, а то и 16 кБ и если бинарник чуть вылез за пределы кластера хоть на байт, то под него уйдет весь кластер целиком. Basil A. SidorovК чему всё это крохоборство???Не знаю... Надо мелкомягких спросить. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2018, 15:15 |
|
||
|
Отличие Class от Struct
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovК чему всё это крохоборство??? Кому и рак рыба, а у кого-то и жемчуг мелкий ))) /вольный пересказ народной мудрости, я ее дословно не помню/ MSDNUsing this form of __declspec can result in a significant reduction in code size. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2018, 15:27 |
|
||
|
Отличие Class от Struct
|
|||
|---|---|---|---|
|
#18+
rdb_devMasterZivВо-первых, это не стандарт, а расширение какое-то, во-вторых, как же абстрактному классу-то и без vtable ? P.S. почитал про это -- вообще хрень какая-то... Но и потом -- оно НЕ удаляет vtable, она удаляет лишь использование этого vtable (инициализацию указателя) из конструктора и деструктора.Так нафига абстрактному классу иметь таблицу виртуальных методов, если он никогда не инстанцируется, а используется исключительно для описания интерфейса и наследования? Компилятору достаточно знать только порядок объявлениях виртуальных методов этого класса, а vtable ему без надобности. А pure virtual function call кто будет говорить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2018, 17:17 |
|
||
|
Отличие Class от Struct
|
|||
|---|---|---|---|
|
#18+
MasterZivА pure virtual function call кто будет говорить?Pure virtual functions in pure abstract class? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2018, 17:21 |
|
||
|
Отличие Class от Struct
|
|||
|---|---|---|---|
|
#18+
Я так понимаю, что у M$ объявление классов это часто _внешние_ интерфейсы. Ни наследоваться, ни создавать instance из них никто не планирует. Например объявления классов под интерфейсы COM объектов. AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2018, 17:24 |
|
||
|
Отличие Class от Struct
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, ООП и виртуальные методы объектов не имеют никакого отношения к COM и OLE. COM и OLE вполне реально пишутся чисто процедурным языком без всяких заморочек. Это просто спецификация интерфейса взаимодействия, внешне напоминающая ООП. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2018, 17:26 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39649598&tid=2017851]: |
0ms |
get settings: |
10ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
53ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 15ms |
| total: | 164ms |

| 0 / 0 |
