a*b
Der Operator soll ein neues Objekt zurückgeben, keine Referenz auf a
.
korrekte Syntax ein operator*
innerhalb der Klasse zu erklären ist:
class Mat
{
..
..
..
Mat operator*(int elem){
Mat res = *this;
res.multiWith(elem);
return res;
}
};
Dann Typ des linken Parameters ist zwingend die aktuelle Klasse (hier: linke Parameter von a*b
notwendigerweise eine Mat
Instanz).
Nun, wenn Sie an die Betreiber außerhalb der Klasse deklarieren, können Sie jede Art für linke und rechte Parameter zur Auswahl:
class Mat
{
};
Mat operator*(const Mat& left,int right){
Mat res;
// do res=left*elem
return res;
}
Mat operator*(int left,const Mat& right){
Mat res;
// do res=left*right
return res;
}
und was ist, wenn die Mat Vorlage ist ... Wie kann ich die aus meinen Klassenoperatoren schreiben? – JohnnyF
@JohnnyF: Das sollte wahrscheinlich eine separate Frage sein, da OP das nicht erwähnt hat. Fügen Sie jedoch vor der Operator-Deklaration einfach die Vorlage <...> hinzu. Eine extern für eine Klasse deklarierte Operation kann eine Vorlage sein. – jpo38
@ downvoter, bitte erarbeiten ... – jpo38