PDA

Visualizza la versione completa : [c++]overloading degli operatori.


giuseppe500
21-11-2011, 11:55
ciao.
Devo trovare uno standard per im mio codice di come creare l'overloading degli operatori .
mi spiego meglio postando un po di codice:
.h


CIfcTrasformation3d* operator* (CIfcTrasformation3d * second);


.cpp



CIfcTrasformation3d* CIfcTrasformation3d::operator* (CIfcTrasformation3d* second)
{
*m_pRotationMatrix = *m_pRotationMatrix * *second->GetRotationMatix();
*m_pPosition = *m_pPosition + *second->GetTranslationVector();

return NULL;
}



CIfcTrasformation3d una mia classe che aggrega posizione e rotazione di un elemento.Lo utilizzo cosi:



for(itBegin; itBegin != itEnd; ++ itBegin)
{
Step::ObsPtr<ifc2x3::IfcRelAssignsToProduct> ptrAssignProduct = *itBegin;
Step::RefPtr<IfcProduct> ptrProduct = ptrAssignProduct->getRelatingProduct();

RefPtr<IfcLocalPlacement> pLocalPlacement = ptrProduct->getObjectPlacement();

CIfcTrasformation3d Trasformation3d;
//
Trasformation3d.InitPositionAndRotation(pLocalPlac ement.get());


AllTrasformation3d =*(AllTrasformation3d * &Trasformation3d);
}



il mio problema che a volte mi trovo ad utilizzare l'operatore con gli oggetti , a volte con i puntatori , da qui il casino che ho scritto(bruttissimo me ne rendo conto).Esiste un metodo o una linea per gestire i parametri degli operatori in questi casi?
come ?
grazie.

shodan
21-11-2011, 20:39
Gestisci il tutto con reference a oggetti cos ti eviti brutte sorprese.

giuseppe500
22-11-2011, 13:45
e per il tipo di ritorno?
meglio che sia anche lui un reference ?

shodan
22-11-2011, 18:14
Dipende dall'operatore.
Per gli operatori binari (+, -, *, /, % etc ) devi restituire un nuovo oggetto, per operatori unari ( =, +=, -=, *= etc) restituisci il reference all'oggetto che stai modificando.

Loading