Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 16.12.2013
Сообщений: 21

Можно ли каким-то образом заставить реагировать родительский объект на изменение параметров дочернего

21.06.2016, 21:52. Показов 1411. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача такая. Есть некий класс:
C++
1
2
3
4
5
6
7
8
9
10
11
class Vegetables
{
    protected:
        long FCal;
        void __fastcall SetCal(long c);
 
    public:
        String Name;
                int Wight;
        __property long Cal={read=FCal,write=SetCal};
};
И этот класс задействован в другом классе:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class Salat
{
    protected:
        long FSumCal;
        void __fastcall SetSumCal(long c) { return; };
 
    public:
               String Title;
               Vector<Vegetables> Ingredients; 
        __property long SumCal={read=FSumCal,write=SetSumCal};
 
               void RecalcCal();
};
Если определить класс именно так, то при изменении ингредиентов салата придётся каждый раз вручную вызывать процедуру расчёта калорий.
Можно ли каким-то образом заставить реагировать родительский объект на изменение параметров дочернего так, как будто это __property родителя?

З.Ы. класс является абстрактным примером более сложной задачи, поэтому подставить расчёт калорий в процедуру GetSumCal не получится.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.06.2016, 21:52
Ответы с готовыми решениями:

Можно ли каким-то образом заставить WebClient создавать папки для скачиваемых файлов
Можно ли каким-то образом заставить WebClient создавать папки для скачиваемых файлов, т.е. я пишу путь для сохранения файла...

Передача параметров из дочернего класса в родительский
Добрый день. Хочу изменить значение в родительском классе, вызвав метод в дочернем, но она не меняется #include &quot;pch.h&quot; ...

Каким образом заставить программу загружать dll из указанной папки?
Есть одна программка, которую надо заставить подгружать .dll'ку из другой папки. Пишу античит к одной игрушке, нужно сделать так, чтобы...

27
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
27.06.2016, 17:32
Студворк — интернет-сервис помощи студентам
Автор рецепта что ли?
0
Модератор
 Аватар для vxg
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,468
27.06.2016, 18:02
Avazart, не. Вот есть рецепт и в нем есть ингредиенты. И каждый из них знает в каком рецепте он состоит (знает владельца вектора ингредиентов) и может вызвать его функцию подсчета если количество ингредиента меняют. Правда вектор тогда тоже надо будет перегрузить что бы при смене набора (добавлении и удалении ингредиентов) расчёт тоже шёл... Мда. Видимо легче накрыть это дело обложкой) или иметь векторы которые под это заточены
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
27.06.2016, 18:21
Цитата Сообщение от vxg Посмотреть сообщение
И каждый из них знает в каком рецепте он состоит (знает владельца вектора ингредиентов) и может вызвать его функцию подсчета если количество ингредиента меняют.
А какого спрашивается ингредиент должен что-то знать о рецепте?
Чем оправдано введение сильной связности, тем более что объекты создаются не динамически?

Добавлено через 4 минуты

Не по теме:

Цитата Сообщение от vxg Посмотреть сообщение
Видимо легче накрыть это дело обложкой) или иметь векторы которые под это заточены
Вы про что-то типа https://www.cyberforum.ru/post6726403.html ?

0
Модератор
 Аватар для vxg
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,468
27.06.2016, 18:37
Avazart, ну а почему бы ему и не знать если к примеру предусмотрена интенсивная работа с ингредиентом при которой должен меняться салат. С ку не работал
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
27.06.2016, 18:49
Что бы не было неоправданной сильной связности между классами.

Добавлено через 7 минут
Ничто не мешает хранить сумму:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class Salat
{ 
    public:
         unsigned addIngredient(const Ingredient& some);
         void  removeIngredient(unsigned index);
 
         const Vector<Vegetables>& ingredients() const;
 
         long  sum()const;
         String title() const;
         void setTitle(const String& title);
 
   private:  // Члены класса делаются закрытыми!!!
        Vector<Vegetables> ingredients_; 
        String title_;
        long sum_;
};
 
unsigned Salat::addIngredient(const Ingredient& some)
{
   sum_+= ingredients_.value;
   ingredients_.push_back(some);
}
 
void  Salat::removeIngredient(unsigned index)
{
   sum_-= ingredients_[index].value;
   ingredients_.erase(ingredients_.begin()+index);
}
 
long  Salat::sum()const;
{
   return sum_; 
}
1
Модератор
 Аватар для vxg
3410 / 2182 / 354
Регистрация: 13.01.2012
Сообщений: 8,468
27.06.2016, 19:51
Avazart, ну так то да. На самом деле можно вообще ничего не хранить и не накрывать - просто считать её каждый раз заново) для некоторых задач и такой подход допустим
0
0 / 0 / 0
Регистрация: 16.12.2013
Сообщений: 21
03.07.2016, 21:30  [ТС]
Цитата Сообщение от vxg Посмотреть сообщение
Avazart, ну так то да. На самом деле можно вообще ничего не хранить и не накрывать - просто считать её каждый раз заново) для некоторых задач и такой подход допустим
Именно для этого я и сделал уточнение, что вычисление суммы очень трудоёмко и нерационально при каждом обращении. В то время, как изменение рецептуры - редкое дело.
Цитата Сообщение от Avazart Посмотреть сообщение
Липпман "Язык программирования С++ Базовый курс", 5-е изд. - 2014
Весьма интересная книга, спасибо. Хотя подход к изложению материала очень спорный и для того, кто С++ не знает - читать её будет невозможно. Но для быдло-кодеров типа меня - пойдёт.

Смысл понятен, но как
Цитата Сообщение от Avazart Посмотреть сообщение
const Vector<Vegetables>& ingredients() const;
указывает на то, что это "ссылка" именно на:
Цитата Сообщение от Avazart Посмотреть сообщение
Vector<Vegetables> ingredients_;
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
03.07.2016, 21:59
Цитата Сообщение от M-a-x-Z Посмотреть сообщение
Именно для этого я и сделал уточнение, что вычисление суммы очень трудоёмко и нерационально при каждом обращении. В то время, как изменение рецептуры - редкое дело.
Все зависит от ситуации.
К примеру добавление суммы увеличивает размер объекта класса на 4 байта, если объектов класса много ...
Кроме того если "изменение рецептуры редкое дело", то смысл вызвать метод подсчета часто? Один раз вызвал/сохранил в переменную.
Цитата Сообщение от M-a-x-Z Посмотреть сообщение
указывает на то, что это "ссылка" именно на:
Цитата Сообщение от Avazart Посмотреть сообщение
C++
1
2
3
4
const Vector<Vegetables>& Salat::ingredients() const
{ 
  return ingredients_; 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.07.2016, 21:59

Возможно ли как-то заставить BIOS, каким то образом определить название проца
Здравствуйте уважаемые специалисты ну или просто многознающие люди!Заранее прошу прощения за возможно нубский вопрос, но всё же мне очень...

Каким образом возможен сброс параметров BIOS?
Пожалуйста подскажите!

Каким образом пройдёт передача параметров в функцию
Доброго времени! Переписываю код с Си. Есть такая вот ф-ия: cl_int clEnqueueCopyImage ( сonst size_t src_origin ) Как произойдёт...

Каким образом заставить компонент RichEdit1 перемещать свой Skroll на последнюю запись?
На форме есть компонент RichEdit1 На этот компонент постоянно добавляются записи с других процедур. Каким образом заставить компонент...

Каким образом созданный объект отправить на печать
:read:Всё дело в том, что не люблю, или не умею, или всё вместе... искать информацию. Делал маленькие каникулы для своего разума в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru