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

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

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

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

11.08.2012, 17:14. Просмотров 462. Ответов 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.08.2012, 17:14     Перегрузка функции. Зависимость от формулы
Посмотрите здесь:

Перегрузка функции - C++
Люди-программеры, помогите ,пожалуйста, с решением задачи:wall: Создайте функцию promt() для выдачи подсказки пользователю и ожидания...

Перегрузка функции - C++
Написать перегрузку функции: 1. а) Для массива целых чисел находит середнее арифметическое б) Для строки находит количество букв,...

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

Перегрузка функции - C++
Помогите решить проблему. Нужно,например,создать перегрузку функции для сложения 2 чисел для 2 разных типов данных. Если числа уже...

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

Перегрузка функции - C++
class num { private: long a; long b; int c; int d; public: num(); num(long, long);

Перегрузка функции С++ - C++
Создайте перегруженную функцию decr(), которая от аргумента вычитает 1, где аргументы целый (int), вещественный (double) тип, символьный...

перегрузка функции - C++
Функція func повертає позицію першого входження шуканого числа чи символу. Добавлено через 42 секунды помогите с кодом)Официальный...

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

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


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 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
Сообщений: 26
Завершенные тесты: 1
11.08.2012, 17:39  [ТС]     Перегрузка функции. Зависимость от формулы #3
Спасибо, сейчас попробую разобраться.
Yandex
Объявления
11.08.2012, 17:39     Перегрузка функции. Зависимость от формулы
Ответ Создать тему
Опции темы

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