С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Slayerz
2 / 2 / 1
Регистрация: 14.07.2012
Сообщений: 28
Завершенные тесты: 2
#1

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

11.08.2012, 17:14. Просмотров 478. Ответов 2
Метки нет (Все метки)

Добрый день! Работаю с перегрузкой функции, но необходимо реализовать выбор зависимой формулы, благодаря которой будут считаться все функции.

Это заголовочный файл в котором содержатся вычисляемые функции, но имеется переменная 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.08.2012, 17:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка функции. Зависимость от формулы (C++):

Перегрузка в виде метода VS Перегрузка в виде функции друг - C++
Привет! Собственно сабж: В каких случаях используется перегрузка в виде метода, а когда в виде функции друг? Добавлено через 4...

Вычислить функции с использованием их разложения в степенной ряд. Функции и Перегрузка функций - C++
Добрый день. Дана лабораторная работа, (см. ниже 2 скриншота) по заданию нужно вычислить функции с использованием их разложения в степенной...

Дружественные функции. Наследование. Перегрузка функции - C++
Здравствуйте, у меня проблема Не знаю куда Вставить имеющийся код(В какую строчку или строчки кода). Первый код это было 1 задание, 2-ой...

Перегрузка операторной функции и функции ! - C++
3.16Разработать класс ThreeAngle для работы с плоскими треугольниками. В качестве членов-данных задаются длины трех сторон треугольника....

Перегрузка функции - C++
Что такое перезагрузка функции в с++? Для чего она нужна? Есть случаи, когда без нее никак? Приведите пример перезагрузки функции? ...

Перегрузка функции - C++
Помогите плз сделать лабораторную по программированию Задание такое: Класс «матрица». Матрица имеет размер 3х3 и содержит...

2
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 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;
1
Slayerz
2 / 2 / 1
Регистрация: 14.07.2012
Сообщений: 28
Завершенные тесты: 2
11.08.2012, 17:39  [ТС] #3
Спасибо, сейчас попробую разобраться.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.08.2012, 17:39
Привет! Вот еще темы с ответами:

Перегрузка функции - C++
#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; void foo(string value){ cout &lt;&lt; &quot;String&quot; &lt;&lt; endl; } ...

Перегрузка функции - C++
Сделать перегрузку для функции : для всех|x|&lt;1 arctg x=x-x^3/3+x^5/5..... аргументом функции является переменная х,а граница ряда...

Перегрузка функции - C++
Привет, добрые и умные люди, не могу сдеть прогу....плиз помогите Согласно заданию нужно реализовать класс абстрактного типа данных ...

перегрузка функции - C++
Функція func повертає позицію першого входження шуканого числа чи символу.ПОДСКАЖИТЕ КАК ЗАМУТИТЬ


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.