В следующем коде имеется перегруженный оператор, позволяющий умножить вектор справа на число. Как сделать обратное, то есть, чтобы вектор можно было умножать на число слева?
template <class T> class Vector{ protected: T *v; int dim; public: Vector(T *a,int n); Vector<T> operator*(T k); void out(); }; template <class T> Vector<T>::Vector(T *a,int n){ if(n<=0){ fprintf(stderr,"dimension must be positive\n"); exit(1);} dim=n; v=new T[n]; for(int i=0;i<dim;i++) v[i]=a[i]; } template <class T> Vector<T> Vector<T>::operator *(T k){ Vector v1(dim); for(int i=0;i<dim;i++) v1.v[i]=k*v[i]; return v1; } //template <class T> Vector<T> Vector<T>::operator *(Vector &a){ нужно что то типа этого, но // Vector v1(dim); этот код не работает // for(int i=0;i<dim;i++) v1.v[i]=k*a[i]; // return v1; //} template <class T> void Vector<T>::out(){ for(int i = 0;i<dim;i++)std::cout<<v[i]<<' '; std::cout<<'\n'; } int main(int argc, char* argv[]){ int a[5]={4,-3,87,2,-45}; Vector<int> v(a,5); (v*7).out(); // нужно, чтобы возможно было бы вызвать // (7*v).out(); }
|