Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Отличие структур от классов  (Прочитано 18402 раз)
0 Пользователей и 1 Гость смотрят эту тему.
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« : 13-07-2007 07:33 » 

Народ, тольк не посылайте к стандарту Улыбаюсь.
Насколько я помню отличие структур от классов в том, что в структуре по умолчанию все поля и методы public в классе - private и структуры не поддерживаю наследования, в отличие от классов. Если кто что дополнит, будет неплохо.
Но вопрос вот в чем. В Visual C++ можно наследоваться от структуры. Если работать с СОМ, то там есть слово такое заветное interface, которое не что иное как следующее
#define interface struct
И потом в длальнейшем можно делать так
class MyClass:public IMath //IMath объявлен как интерфейс, а по сути структура

Это что, отклонение от стандарта С++ или это я что-то путаю и не понимаю?
Записан

ещё один вопрос ...
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #1 : 13-07-2007 08:02 » 

никаких отклонений от стандарта(ИМХО), структуры можно наследовать.
по умолчанию считай так
класс обявленные как class имеет по умолчанию доступ private
класс обявленный как struct имеет по умолчанию доступ public
как следствие, наследуя структуру от класса не обязательно указывать слово public
Записан

Странно всё это....
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 13-07-2007 09:41 » 

от структуры нельзя наследоваться в С#. В С++ можно.
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 13-07-2007 11:13 » 

Это получается, что в С++ отличие структур от классов только в том,ч то по умолчанию все данные в ней public?
Записан

ещё один вопрос ...
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #4 : 13-07-2007 11:18 » 

nikedeforest, да
Записан

eugrita
Помогающий

ru
Offline Offline

« Ответ #5 : 27-07-2011 19:55 » 

Это все формальная сторона вопроса. По существу программист решает вопрос когда достаточно применить структуру, когда ее мало и нужен класс.  Я это решаю так - если модель объекта предметной области требует хоть один метод - тогда класс, иначе структура.
(хотя в С++ в состав структуры могут включаться процедуры и функции).
По моему всегда надо исходить из проектирования модели. Выделять в ней свойства, методы, события.
(вот кстати с событиями в Ansi C++ хреново - не поддерживает)
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #6 : 27-07-2011 20:03 » 

Некромантия Улыбаюсь

(вот кстати с событиями в Ansi C++ хреново - не поддерживает)
eugrita, Зато есть костыли Например в Qt, Да и функторы при определленом напильники можно применять.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 28-07-2011 05:50 » 

eugrita, структура отличается от класса лишь тем, что по умолчанию в ней всё public, а в классе - private. Именно от этого надо плясать - от инкапсуляции полей, а не от "требуется хоть один метод". Например, конструктор в структуре полезен довольно часто, хотя, быть может, поля открыты и методы-аксессоры отсутствуют. А если, например, нужно гарантировать, что переменная через интерфейс должна быть только для чтения, поле нужно закрыть и написать соответствующий get - это уже намекает на класс.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
eugrita
Помогающий

ru
Offline Offline

« Ответ #8 : 28-07-2011 16:18 » 

Cогласен конечно с замечанием Димки. Что такое функтор - тоже мне интересно попробую разобраться.
Но все-таки повторюсь: главное по моему в особенностях модели и объектов, каковые хотим отражать в программе. Конечно, скрывать/открывать поля можно, но по моему это не главное. А главное разработать или взять модель с прописанными методами и событиями, а потом ее запрограммировать используя технику классов
Записан
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #9 : 29-07-2011 03:36 » 

eugrita, это помоему сильно классический подход
У меня обычно так, тест -> код -> test -> код -> рефакторинг -> тест -> рефакторинг -> тест ну и так далее
уже и не помню, когда бы мне требовалось проектировать программу, обычно проектирую систему в целом (требования и описание поведения)
Записан

Странно всё это....
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines