Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.02.2021, 16:21   #11
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию

Цитата:
Еще раз прочитайте и ответьте, как созданный вами объект будет динамически переключаться между реализациями?
Если честно, то я не понимаю, что там внутри происходит, я наугад пытаюсь сделать.
apofioz вне форума Ответить с цитированием
Старый 16.02.2021, 16:23   #12
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

Так вопрос то не о том, что внутри, а вообще, о логике... Вот берем ваш объект и фразу "динамически переключается" - нигде ничего не ёкает?
FrosyaZZ вне форума Ответить с цитированием
Старый 16.02.2021, 16:25   #13
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию

Цитата:
Сообщение от FrosyaZZ Посмотреть сообщение
Смысл в таком объекте?
Вопрос философский) Мне, вообще, не ясно, зачем при наследовании ещё и композиция с тем же классом, от которого уже наследуемся.
apofioz вне форума Ответить с цитированием
Старый 16.02.2021, 16:29   #14
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию

Цитата:
Сообщение от FrosyaZZ Посмотреть сообщение
Так вопрос то не о том, что внутри
Очень даже о том, когда ясно видишь картину, то точнее представляешь, что нужно делать или ,точнее стоит ли делать так или стоит иначе.

Цитата:
Сообщение от FrosyaZZ Посмотреть сообщение
нигде ничего не ёкает?
Ну, разве что с библиотеками DLL что-то ассоциируется. Они подтягиваются тогда, когда нужны, видимо, при определённых условиях.
apofioz вне форума Ответить с цитированием
Старый 16.02.2021, 16:57   #15
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

Цитата:
Сообщение от apofioz Посмотреть сообщение
Мне, вообще, не ясно, зачем при наследовании ещё и композиция с тем же классом, от которого уже наследуемся.
Наследование от "интерфейса", т.к. объект будет использоваться вместо проксируемого и должен реализовывать тот же интерфейс.
Композиция, чтобы хранить и переключать реальный объект.

Цитата:
Сообщение от apofioz Посмотреть сообщение
Ну, разве что с библиотеками DLL что-то ассоциируется. Они подтягиваются тогда, когда нужны, видимо, при определённых условиях.
А это тут причем? Давайте еще раз: вам говорят надо будет писать и потом менять написаное - а вы берете ручку вместо карандаша...
FrosyaZZ вне форума Ответить с цитированием
Старый 16.02.2021, 21:31   #16
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию

Цитата:
Сообщение от FrosyaZZ Посмотреть сообщение
А это тут причем?
При том, что это вызывает некую аналогию с динамическим... или просто созвучно с этим.


Цитата:
Сообщение от FrosyaZZ Посмотреть сообщение
вам говорят надо будет писать и потом менять написаное - а вы берете ручку вместо карандаша...
Отлично, тогда что есть динамическое переключение объектов?! Если есть динамическое, подозреваю, есть и статическое переключение). Как по мне решение должно приниматься в конструкторе класса заместитель, но тогда нужно принять решение, на какой объект переключится, а значит нужно как-то об этом уведомить, либо по результату неких действий, либо по аргументу, который нужно передавать в конструктор вместе с указателем на базовый объект... Вообще тема интересная, но как-то не совсем мне ясная, к сожалению.
apofioz вне форума Ответить с цитированием
Старый 17.02.2021, 12:44   #17
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

Цитата:
Сообщение от apofioz Посмотреть сообщение
Отлично, тогда что есть динамическое переключение объектов?!
Изменение объектов во время исполнения программы.

Цитата:
Сообщение от apofioz Посмотреть сообщение
Если есть динамическое, подозреваю, есть и статическое переключение).
Конечно. std::string - это basic_string<char, char_traits<char>, allocator<char>>

Цитата:
Сообщение от apofioz Посмотреть сообщение
Как по мне решение должно приниматься в конструкторе класса заместитель
Почему? Что мещает переключится после, например, ввода опций из файла?

Цитата:
Сообщение от apofioz Посмотреть сообщение
но тогда нужно принять решение, на какой объект переключится, а значит нужно как-то об этом уведомить, либо по результату неких действий, либо по аргументу, который нужно передавать
Кого вы уведомлять собрались? Но в целом да - по какому-то признаку можно переключать реализации.

Цитата:
Сообщение от apofioz Посмотреть сообщение
вместе с указателем на базовый объект...
Зачем? Чей базовый?
FrosyaZZ вне форума Ответить с цитированием
Старый 17.02.2021, 13:29   #18
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию

Цитата:
Сообщение от FrosyaZZ Посмотреть сообщение
Чей базовый?
Subject - в данном случае. Proxy(Subject* obj, enum action{...}) допустим так)


Цитата:
Сообщение от FrosyaZZ Посмотреть сообщение
Зачем?
Что бы выбрать, какой объект создавать.


Цитата:
Сообщение от FrosyaZZ Посмотреть сообщение
Кого вы уведомлять собрались?
Органы, кого же ещё)
Некое условие, которое выбирает, какой объект создавать.

Цитата:
Сообщение от FrosyaZZ Посмотреть сообщение
Почему?
Не знаю, у меня такое вот восприятие термина динамическое переключение, я понимаю, что можно создать функцию, которая будет это делать, в конце концов её можно из конструктора вызвать.
apofioz вне форума Ответить с цитированием
Старый 17.02.2021, 13:39   #19
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

Цитата:
Сообщение от apofioz Посмотреть сообщение
допустим так)
Зачем?

Цитата:
Сообщение от apofioz Посмотреть сообщение
Что бы выбрать, какой объект создавать.
А если я не хочу выставлять детали реализации наружу? А если я не хочу заставлять пользователя моего класса делать работу за меня?

Цитата:
Сообщение от apofioz Посмотреть сообщение
Не знаю, у меня такое вот восприятие термина динамическое переключение, я понимаю, что можно создать функцию, которая будет это делать, в конце концов её можно из конструктора вызвать.
Код:
int main() {
  worker* w{ nullptr };

  int i{-1};
  std::cin >> i;
  switch(i) {
    case 0:
      w = new worker0;
      break;
    case 1:
      w = new worker1;
      break;
   default:
      w = new default_worker;
      break;
  }

  w->work();
  delete w;
}
Это динамическое переключение? Тут есть какой-то специальный конструктор?
FrosyaZZ вне форума Ответить с цитированием
Старый 17.02.2021, 14:48   #20
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию

Цитата:
Сообщение от FrosyaZZ Посмотреть сообщение
Это динамическое переключение? Тут есть какой-то специальный конструктор?
Имелся ввиду мой пример, в контексте которого это возможно и имеет смысл, по-моему.


Цитата:
Сообщение от FrosyaZZ Посмотреть сообщение
А если я не хочу выставлять детали реализации наружу?
Можно функцию вызвать, и не надо будет ничего выставлять. Это уже придирки я хотел разобраться, а не ещё больше запутываться.

Цитата:
Сообщение от FrosyaZZ Посмотреть сообщение
А если я не хочу заставлять пользователя моего класса делать работу за меня?
Тогда вполне подойдёт тот вариант, который я привёл выше с dynamic_cast<>(), всё от контекста зависит, видимо.
apofioz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pascal Матрицы - элемент bij которой равен сумме элементов данной матрицы расположенных в области, определяемой индексами i,j так, как показано на рисунке users1 Помощь студентам 0 12.01.2017 06:04
Модифицировать программу так, чтобы она осуществляла поиск подматрицы n,в которой сумма элементов главной диагонали наибольшая АсяЯ Паскаль, Turbo Pascal, PascalABC.NET 0 05.11.2016 16:57
архитектурная компьютерная программа для создания дизайна igori.alekseev Свободное общение 2 16.01.2009 16:37