Я пытаюсь научить себя C++ и как исходный проект, я хочу создать код для выполнения метода Ньютона для функций одной переменной. Я хочу создать класс ObjectiveFunction
, который хранит пользовательские функции для целевой функции, первой производной и второй производной.Атрибуты членов, которые являются функциями в C++
Я хочу, чтобы конструктор ObjectiveFunction
принимать от 0 до 3-х аргументов, когда сами аргументы являются функциями:
// ObjectiveFunction.h
// Class definition for an Objective Function object.
#ifndef OBJECTIVE_H
#define OBJECTIVE_H
class ObjectiveFunction
{
public:
// Constructors
// Default constructor
ObjectiveFunction();
// Constructor with just objective function.
ObjectiveFunction(double f(double));
// Constructor with objective function and derivative function.
ObjectiveFunction(double f(double), double fp(double));
// Constructor with objective, derivative, and second derivative functions.
ObjectiveFunction(double f(double), double fp(double), double fpp(double));
// Methods
void setObjectiveFunction(double f(dobule));
void setDerivativeFunction(double f(double));
void setSecondDerivativeFunction(double f(double));
double evalObjectiveFunction(double);
double evalDerivativeFunction(double);
double evalSecondDerivativeFunction(double);
private:
// Storage for the functions.
// This is the part I'm not sure of.
// Attempt with function pointers
double (*objFunc)(double);
double (*d1Func)(double);
double (*d2Func)(double);
};
#endif // OBJECTIVE_H
Как бы я создавать частные элементы данных, которые сами являются функциями. Я хочу создать объекты функций, которые (за исключением частного) будут доступны, например, foo.obj_func(3.0)
или foo.deriv_func(3.0)
, где obj_func
устанавливается конструктором на основе функций, которые пользователь передает классу.
Каков правильный способ сделать это? Было бы лучше, если бы был способ, который не полагался бы на использование указателя на объект функции, но я думаю, если это единственный способ, то это то, что мне нужно будет изучить.
Указатели функций - это именно то, что вам нужно (потому что это то, что вы передаете своим конструкторам). –
Я изменил раздел 'private' кода с моей попыткой с указателями функций. Это правильная идея? – ely
В C++ 11 вы можете использовать std :: function. –