Usando amigo sobrecarga del operador debe hacer el truco para usted y es una forma común para definir los operadores binarios, sólo tiene que añadir:
friend sample operator+(const sample& a, const sample& b); //in class
sample operator+(const sample& a, const sample& b) { //outside the class
return sample(a.x + b.x);
}
Si quieren que siga siendo un miembro, (que tiene desventajas en algunas raras escenarios, y no hay aspectos positivos), que tienen que hacer el operador de una función const
:
sample operator+(sample s) const; //in class
sample sample::operator+(const sample& b) const { //outside the class
return sample(this->x + b.x);
}
Cualquiera de éstos permitirá Secuencia de operadores. La razón por la cual su s = s + s1 + s2
anterior estaba fallando, es que el s + s1
se ejecutaría y devolvería un objeto temporalsample
. Luego, intentaría agregar s2
a esa muestra. Sin embargo, los temporales solo pueden ser const
referencias [1], y como tal, solo pueden usar las funciones de miembro const
. Como su función miembro operator+
no es una función const
, no puede usar esa función en el const
temporal. Tenga en cuenta que para hacerlo const
, tuve que reescribirlo, ya que su versión modifica el objeto en el lado izquierdo de +
.
[1] con las excepciones no son particularmente relevantes aquí, a saber rvalues
mira aquí! http://courses.cms.caltech.edu/cs11/material/cpp/donnie/cpp-ops.html o aquí http://www.cprogramming.com/tutorial/operator_overloading.html – trumpetlicks
tenga en cuenta que 'operator +' should _not_ cambie el valor del objeto a la izquierda de '+', pero el suyo sí. Si escribió 's3 = s1 + s2', su código cambiaría' s1' para mantener también el resultado. –
Además, 'main' tiene un tipo de retorno' int'. –