![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Nikys |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 9.5.2013 Репутация: нет Всего: нет |
Подскажите, пожалуйста, наиболее удобную схему для вариации методов. Грубо говоря, есть реализация умножения чисел различными методами. Каким образом хранить возможность изменения метода умножения?
На данный момент есть две идеи: 1) Хранение в классе методов в виде функций, на один из которых будет ссылаться указатель на функцию. 2) Хранение в классе объекта абстрактного класса, наследники которого конкретно реализовывают задачу, и к которым динамически приводится тип объекта абстрактного класса (и из него используются возможности этих наследников). Но хотелось бы услышать более рациональные и грамотные идеи по этому поводу для начинающего. Заранее всем благодарен. |
|||
|
||||
tzirechnoy |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 2 Всего: 16 |
В первую очередь, проанализируйте, когда вам потребуется изменять этот метод умножэния. Если при компиляцыи программы -- то это одно, если при создании объектов/матриц, которые будут умножаться -- то это другое, если при каждом умножэнии, в зависимости от алгоритма -- третье, если при каждом умножэнии, в зависимости от какой-то настройки глобальной -- четвёртое.
От этого зависит список доступных методов полиморфизма: абстрагирование при компиляцыи (шаблоны, препроцэссор), абстрагирование через конкретный тип или переменную класса, который содержыт данные, абстрагирование чере конкретный тип или переменную класса, который содержыт конкретные математические формулы, и т.п. |
|||
|
||||
akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Герб Саттер. Новые сложные задачи для С++.
Hurb Sutter. Exceptional C++ (или More Exceptioanl C++) глава "Почему невозможна частичная перегрузка шаблонов функций". Лучше не напишешь и не объяснишь, после этого можешь рассуждать (там чёткая база) -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
Lukkoye |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 23.3.2013 Репутация: 1 Всего: 1 |
Вообще то это зависит от конкретной задачи. Ваш запрос какой то слишком уж не конкретный. Я приведу пример, как можно на лету менять логику обработок чего-либо: http://rextester.com/TYPUJ89816
Применяя данный способ, вы сможете на лету (в момент выполнения программы) изменять способ умножения. Для этого вам понадобится написать несколько функций, каждая реализует какой то один способ. И в нужный момент назначать ту, или иную функцию механизму, который с их помощью будет выполнять умножение. Это сообщение отредактировал(а) Lukkoye - 7.1.2014, 23:34 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |