Zaimplementowałęm klasę do działań na kwaternionach.
template< class T >
class Kwaternion
{
private:
T wsp[4];
Kwaternion(){}
Kwaternion(T m, T x, T y, T z)
{
wsp[0]=m;
wsp[1]=x;
wsp[2]=y;
wsp[3]=z;
}
~Kwaternion(){}
//operatory
T& operator[] (int i);
Kwaternion<T>& operator= (Kwaternion<T>& k2);
//
Kwaternion<T>& operator+ ();
Kwaternion<T>& operator- ();
};
template< class T >
T& Kwaternion<T>::operator[] (const int i)
{
return wsp[i];
}
template< class T >
inline Kwaternion<T>& Kwaternion<T>::operator= (Kwaternion<T>& k2)
{
if(&k2 != this)
{
for(int i=0; i<4; i++)
{
wsp[i] = k2.wsp[i];
}
}
return *this;
}
template< class T >
inline Kwaternion<T>& Kwaternion<T>::operator+ ()
{
return *this;
}
template< class T >
inline Kwaternion<T>& Kwaternion<T>::operator- ()
{
Kwaternion<T> temp;
Kwaternion<T>* t1;
for(int i=0; i<4; i++)
{
temp.wsp[i] = - wsp[i];
}
t1 = &temp;
return *t1;
}
t1 w funkcji operator- wprowadziłem , ponieważ po wpisaniu temp sygnalizował błąd.
Teraz w zasadzie chodzi.
Problem polega na tym, że po wywołaniu w programie funkcji operatorowej
kwaternion<int> a, b;
b= -a;
wcale nie jest zwracana wartośc -a, /tzn tylko 2 pierwsze współrze
ne się zgadzają, a pozostałe nie.
W czym jest problem?
Marian