¿Debo necesitar redefinir todos los operadores de sobrecarga con tipo derivado si necesito usarlos en la clase derivada?Operadores de sobrecarga en la clase derivada
El siguiente código compila bien:
class Point {
public:
Point(int X = 0, int Y = 0):x(X), y(Y) {}
virtual ~Point() {}
Point operator +(Point &rhs) {
return Point(x + rhs.x, y + rhs.y);
}
protected:
int x, y;
};
class Vector : public Point {
public:
Vector(int X, int Y) : Point(X, Y) {}
~Vector() {}
Vector operator +(Vector &rhs) {
return Vector(x + rhs.x, y + rhs.y);
}
};
int main()
{
Vector v1(1, 2);
Vector v2(3, 2);
Vector v3 = v2 + v1;
}
Pero por lo que he leído,
cuarto C++ Primer Ed. Sección 15.5.3.
Si una clase derivada quiere hacer todas las versiones sobrecargadas disponibles a través de su tipo, entonces debe, o bien redefinen todos ellos o ninguno de ellos.
¿La parte de la frase "none of them
" tiene sentido aquí?
@Ernest Friedman-Hill: 1. 'Override' es aplicable solo para funciones virtuales. Este caso es 'overloading' 2. Los miembros son heredados pero' hidden' debido a la sobrecarga de clase derivada. –
Sí, esto es todo correcto. Mi lenguaje es bastante impreciso y más bien de color Java; Lo retocaré. –
@ Ernest Friedman-Hill: Disculpas, ya había publicado una respuesta antes de formatearla o me habría abstenido. –