2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Перегрузка оператора
Сообщение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();
}

 Профиль  
                  
 
 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);

 Профиль  
                  
 
 Re: Перегрузка оператора
Сообщение13.05.2010, 01:34 
Заслуженный участник


26/07/09
1559
Алматы
+ дружба, чтобы глаза не разбегались по всему исходнику. :)

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group