Вектор-функция в 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;}
Онлайн всего: 25
Гостей: 25
Пользователей: 0

STUDLAB Сообщить про опечатку на сайте