|
|
fish-ka |
Перегрузка оператора 12.05.2010, 13:20 |
|
05/01/10 90
|
В следующем коде имеется перегруженный оператор, позволяющий умножить вектор справа на число. Как сделать обратное, то есть, чтобы вектор можно было умножать на число слева?
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(); }
|
|
|
|
|
AlexDem |
Re: Перегрузка оператора 12.05.2010, 13:38 |
|
Заблокирован |
|
07/08/06 ∞ 3474
|
Нужно использовать не методы класса, а функции-хелперы, примерно так:
class CachedStr { // Здесь нет никаких операторов +, или только один из них }
// Операторы - вне класса, оба или только второй std::string operator + (const CachedStr &obj, const std::string &str); std::string operator + (const std::string &str, const CachedStr &obj);
|
|
|
|
|
Circiter |
Re: Перегрузка оператора 13.05.2010, 01:34 |
|
Заслуженный участник |
|
26/07/09 1559 Алматы
|
+ дружба, чтобы глаза не разбегались по всему исходнику. :)
|
|
|
|
|
|
Страница 1 из 1
|
[ Сообщений: 3 ] |
|
Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы