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

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

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

« Ответ #60 : 22-05-2010 11:10 » 

Цитата: ezus
Где в этом примере связь с поставленным вопросом?
Дабы не выражаться нецензурно, я лучше промолчу. Тем более, что убедительные аргументы уже нашлись.
Записан

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

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

WWW
« Ответ #61 : 22-05-2010 22:28 » 

ezus, если не секрет, за что ты получил такое звание?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
ezus
Опытный

il
Offline Offline

« Ответ #62 : 23-05-2010 07:24 » 

ezus, если не секрет, за что ты получил такое звание?
А разве оно такое уж высокое?
Стам - осколни имени и фамилии - не более.
Записан
sss
Специалист

ru
Offline Offline

« Ответ #63 : 24-05-2010 01:05 » 

Или вы проверяете меня на вшивость - знаю ли я представление данных в разных процессорах? А вы знаете?
Где в этом примере связь с поставленным вопросом?

Не хорошо отвечать вопросом на вопрос...
А, а все таки, чему равно dw?

Отвечу за вас: я не знаю чему равно значение dw, потому что эта переменная не инициализирована полностью...  Возможно для нее вызывается конструктор по умолчанию, возможно память выделяется тупо в стеке. Теперь есть связь с темой?

Записан

while (8==8)
Антон (LogRus)
Глобальный модератор

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


WWW
« Ответ #64 : 24-05-2010 02:59 » 

Коллеги, ну вы чего, чего?
Тут кругом человеки разумные и то товарищ ezus не показал нам момент инициализации, не означает, что его не было.
для всех, нормальным является передать указатель на потомка в функцию принимающую указатель на предка (она там может дел натворить, таких, что не в сказке сказать, ни пером описать), а видители привести указатель потомка, к указателю на предка и вызвать оператор= предка, это пипец какая трагедия.
Ничего тут страшного нет, человек знает про полиморфизм, наследование, инициализацию данных и т.д. и т.п., чего его лечить от болезней которых нет.
Записан

Странно всё это....
Dimka
Деятель
Команда клуба

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

« Ответ #65 : 24-05-2010 10:39 » new

LogRus, отчасти ты прав.

Тем не менее, приведу варианты на мой взгляд правильных решений:

Код: (C++)
b.a = a.a;
т.е. полный перечень всех присваиваемых полей. И не надо оправдываться ленью. Такое описание в коде при прочтении этого кода не оставляет никаких недоразумений по поводу неиницализированных полей. Аналогично в случае вложенных структур.

Вариант с конструктором я приводил выше. Правильно написанный конструктор гарантирует, что все поля будут инициализированы (включая те, которые не заполняются из A). Это снимает с пользователя заботу о неинициализированных значениях переменных. Используется инкапсуляция.

Код: (C++)
struct B: public A
{
   int b;
   void loadFrom(const A &a)
   {
      (A &)(*this) = a;
   }
}
Отдельный метод, который скрывает от пользователя особенности реализации копирования данных из A в B. Этот же метод может содержать код, контролирующий сохранение логической целостности данных и обработку полей, не входящих в A. Опять используется инкапсуляция, а за непродуманность реализации метода отвечает программист-разработчик этой идеи, а не программист-пользователь, который не узнал/не догадался, как нужно правильно записать. В этом же случае полезно делать закрытые поля и предоставлять доступ к ним через аксессоры.

Два последних подхода с точки зрения пользователя записываются в одну строчку, что обеспечивает повторное использование кода копирования по всей системе и одинаковость процесса копирования. При реализации стиле C нужно завести отдельную функцию копирования.
« Последнее редактирование: 24-05-2010 10:42 от Dimka » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Страниц: 1 2 [3]  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines