Форум программистов, компьютерный форум CyberForum.ru

Перегрузка функции. Зависимость от формулы - C++

Восстановить пароль Регистрация
 
Slayerz
2 / 2 / 1
Регистрация: 14.07.2012
Сообщений: 25
Завершенные тесты: 1
11.08.2012, 17:14     Перегрузка функции. Зависимость от формулы #1
Добрый день! Работаю с перегрузкой функции, но необходимо реализовать выбор зависимой формулы, благодаря которой будут считаться все функции.

Это заголовочный файл в котором содержатся вычисляемые функции, но имеется переменная r, от которой зависят все формулы. Имеется два вида формул вычисления r. Если инициализировать выбор через switch, то программа, каждый раз обращаясь за r, требует по новой его выбрать, а необходимо, чтобы r была выбрана в начале выполнения программы 1 раз и счет происходил именно с этим вариантом r до конца выполнения всех расчетов. Вычисления проводятся в другом заголовочном файле, где описан необходимый метод вычисления через класс, туда и подключается эта перегрузка.
Уже пару дней пробую различные варианты, но никак не доходит, как это правильно реализовать.

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
35
36
#include<iostream>
#include<vector>
#include<math.h>
 
using namespace std;
 
vector<double> func(vector<double> x) 
{
    vector<double> x_new;
    x_new.resize(5);
    double a = x[0], b = x[1], c = x[2], d = x[3], g = x[4];
    double r;
    int pro;
    cout << "viberete vid uravneniya: ";
    cin >> pro;
    switch (pro)
    {
        case 1:
        {
            r = a + b;
        }
        break;
        case 2:
        {
            r = a - b;
        }
        break;
    }
    x_new[0] = r;
    x_new[1] = a + b;
    x_new[2] = a + r + c;
    x_new[3] = d + c + b + r;
    x_new[4] = g + d + r + b + a;
 
    return x_new;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.08.2012, 17:14     Перегрузка функции. Зависимость от формулы
Посмотрите здесь:

Перегрузка функции C++
C++ Перегрузка функции
C++ Перегрузка функции
Перегрузка функции C++
C++ Перегрузка функции в С++
Перегрузка функции C++
Перегрузка операторной функции и функции ! C++
C++ Дружественные функции. Наследование. Перегрузка функции

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
11.08.2012, 17:25     Перегрузка функции. Зависимость от формулы #2
Перегрузка выполняется статически. При компиляции. Она не обеспечивает динамический выбор функции в процессе выполнения программы.

Для динамического выбора надо воспользоваться механизмом виртуальных функций: делаете абстрактный класс «Вычислитель r» с виртуальной функцией «вычислить r», делаете сколько надо наследников от этого класса (конкретных классов-вычислителей), в каждом из них реализуется свой вариант вычисления r; свичем выбираете, какой вариант нужен, создаёте (динамически, с помощью new) нужный экземпляр конкретного класса-вычислителя, приводите его к базовому типу интерфейса «Вычислитель r» и возвращаете такой указатель.

Или же можно воспользоваться вариантом «для бедных»: указателем на функцию.

Иллюстрация:
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
// базовый интерфейс
class ICalcR {
public:
  virtual double calc(double a, double b) = 0;
};
 
// конкретный вариант раз
class CalcR_Add : public ICalcR {
public:
  double calc(double a, double b)
  {
    return a + b;
  }
};
 
// конкретный вариант два
class CalcR_Sub : public ICalcR {
public:
  double calc(double a, double b)
  {
    return a - b;
  }
};
 
// обеспечивает динамический выбор
ICalcR* chooseCalcR(int pro)
{
  if (pro == 1) {
    return new CalcR_Add();
  }
  else if (pro == 2) {
    return new CalcR_Sub();
  }
  else {
    // ругнуться на кривое значение pro
  }
}
 
/* где-то в программе */
// выбираете *один раз* нужный вариант и запоминаете его в rCalculator
ICalcR *rCalculator = chooseCalcR(pro);
 
// передаёте его в функцию, где он нужен
func(vector, rCalculator);
 
// в функции вызываете виртуальный метод:
  rCalculator->calc(a, b);
 
// и не забыть потом убрать за собой
delete rCalculator;
Slayerz
2 / 2 / 1
Регистрация: 14.07.2012
Сообщений: 25
Завершенные тесты: 1
11.08.2012, 17:39  [ТС]     Перегрузка функции. Зависимость от формулы #3
Спасибо, сейчас попробую разобраться.
Yandex
Объявления
11.08.2012, 17:39     Перегрузка функции. Зависимость от формулы
Ответ Создать тему
Опции темы

Текущее время: 09:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru