| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Структура с членами-функциями |
| Автор: ksili 21.4.2009, 09:18 | ||||
В программе (не моей) есть h-файл, содержащий такие строки:
то есть в структуре есть две функции. Зачем это было надо городить? В чём отличие от класса? Что может нехорошего произойти при создании экземпляров такой структуры из разных потоков? Я интересуюсь этим, т.к. данный код используется в dll, которая внедряется в другие процессы и, как показало логгирование, на строке
происходит, что-то нехорошее. Приложение (мое, оконное) продолжает вроде работать, не виснет и никаких окошек с ошибками не вылетает. Но вот dll-ка, которая должна внедряться в появляющиеся окна (свои и чужие) то ли не внедряется, то ли не выполняет свои функции. Происходит это не на первом и не на втором вхождении в такую строку. |
| Автор: mrbrooks 21.4.2009, 09:22 |
в С++ ни в чем - кроме того, что по умолчанию все члены/ методы структуры public. |
| Автор: zim22 21.4.2009, 09:37 | ||
ещё одно отличие структуры от класса - разный спецификатор доступа при дефолтном наследовании.
|
| Автор: ksili 21.4.2009, 09:42 |
| Что же может произойти плохого при создании такого объекта? Конструктора же вроде нет. Просто выделяется память? |
| Автор: azesmcar 21.4.2009, 09:47 | ||
Ничего. Структура в С++ это тот же класс, только по умолчанию все члены открыты и наследование от него идет открыто (тоже по умолчанию). А конструктор, деструктор, копирующий конструктор и оператор присваивания для структуры генерируются (если не написаны и используются) также как и для класса. |
| Автор: Andrey44 21.4.2009, 09:48 |
Ну напишите вместо struct - class, и и обьявите все члены public. |
| Автор: azesmcar 21.4.2009, 10:13 | ||||||||
| ksili Еще раз говорю. Структура и класс в С++ - абсолютно тоже самое. Никакой разницы, структура или класс. Если работает в классе, будет работать и в структуре.
нужна, и она выделяется.
и
тоже самое, будут работать они одинаково, никакой разницы в использовании за исключением описанного выше. Добавлено через 28 секунд
ваше воспирятие |
| Автор: zim22 21.4.2009, 10:15 |
абсолютно ничего. |
| Автор: ksili 21.4.2009, 10:20 | ||
| На вопрос ответили. Спасибо. Но как насчёт
Собственно, ответ на него более интересен. |
| Автор: mes 21.4.2009, 10:23 | ||
Вам уже неоднoкратно ответили : то же что если бы она была объявлена как класс. |
| Автор: azesmcar 21.4.2009, 10:26 | ||
Ответный вопрос..а что может произойти при создании экземпляров класса из разных потоков? Ничего если конструктор не обращается к глобальным переменным, если обащается возможно понадобится синхронизация. |
| Автор: mes 21.4.2009, 10:28 |
Члены-функции являются членами структуры/класса, а не созданных объектов. Т.е их декларации используется для установления прав доступа и области видимости, но они (члены-функции) не присутствуют в созданных объектах, в отличии от членов-данных. т.е объект (экземпляр) структуры, описанной с функциями, ничем не отличается от объекта структуры, описанной без членов-функций, и ничем не отличается от объекта класса. |