Вектор-функция в C++
Под вектор-функцией в данном случае будем подразумевать такую функцию, которая в качестве результата возвращает массив значений. Как известно, обычная функция своим результатом может возвращать все, кроме массива. Поэтому для определения вектор-функции создадим специальный класс, в котором перегрузим ряд операторов (в первую очередь оператор [ ] ), чтобы формально результат вызова функции можно было индексировать. Разумеется, о создании реальной вектор-функции речь не идет, но внешне иллюзия наличия вектор-функции будет полной. Для простоты рассмотрим ситуацию, когда вектор-функция описывает некоторую пространственную силу в трехмерном декартовом пространстве. Это означает, что вектор-функция в качестве значения возвращает массив размера 3. Каждый из трех компонентов силы является функцией времени. Соответствующий
программный код приведен в примере.
#include#include using namespace std; const double pi=3.1415; class MyFunc{ double f[3]; double t; double f1(double z){ return 3*sin(6*pi*z)*cos(2*pi*z);} double f2(double z){ return 5*sin(6*pi*z)*sin(2*pi*z);} double f3(double z){ return 4*cos(6*pi*z);} void set(){ f[0]=f1(t); f[1]=f2(t); f[2]=f3(t);} public: double *operator()(double z){ t=z; set(); return f;} double operator[](int k){ if(!k) return t; else return f[(k-1)%4];} MyFunc(){ t=0; set();} }; int main(){ MyFunc F; double time=0.125; int i; for(i=0; i < 3; i++) cout << F(time)[i] << " "; cout << endl; for(i=1; i < =4; i++) cout << F[i] << " "; cout << endl; return 0;}