Sto imparando C++ e ho creato due semplici applicazioni hello-world. In entrambi utilizzo il sovraccarico dell'operatore, ma qui è il problema. Sul primo, posso fornire due argomenti per sovraccaricare l'operatore, e va bene.Numero di argomenti nel sovraccarico dell'operatore in C++
Intestazione:
enum Element {a,b,c,d,e};
Element operator + (Element x, Element y);
//more overloads for -, *,/here
Fonte:
Element operator + (Element x, Element y) {
return ArrayOfElements[x][y];
}
Ma nel mio secondo app (semplice calcolatore di numero complesso) - questo metodo non ha funzionato. Dopo googling e cercare di capire il motivo per cui, io alla fine con questo codice:
Intestazione:
struct Complex {
double Re;
double Im;
Complex (double R, double I) : Re(R), Im(I) { }
Complex operator + (Complex &Number);
//more overloads
};
Fonte:
Complex Complex::operator + (Complex &Number)
{
Complex tmp = Complex(0, 0);
tmp.Re = Re + Number.Re;
tmp.Im = Im + Number.Im;
return tmp;
}
E 'ora di lavoro, ma voglio sapere , perché nel primo pezzo di codice mi è stato permesso di inserire due argomenti nell'overloading operator
, ma con il secondo mi è stato dato il seguente errore?
complex.cpp:5:51: error: 'Complex Complex::operator+(Complex, Complex)' must take either zero or one argument
E 'lo stesso ogni volta che uso le classi o no. Ho cercato attraverso molti documenti e il secondo modo sembra essere più corretto. Forse è a causa di diversi tipi di argomenti?
Entrambe le fonti sono compilate con i parametri -Wall -pedantic
utilizzando g++
, entrambi utilizzano le stesse librerie.
Le funzioni membro hanno un argomento implicito 'this' –