Esto me sorprendió un poco, pero yo estaba jugando con algo de código y descubrió que, al menos en mi equipo, cuando una función acepta una clase padre por referencia y se pasa una instancia secundaria, que el problema de rebanado doesn' t ocurrir Para ilustrar:¿Pasar por referencia siempre evita el problema de corte?
#include <iostream>
class Parent
{
public:
virtual void doSomething()
{
using namespace std;
cout << "Parent::DoSomething" << endl;
}
};
class Child : public Parent
{
public:
virtual void doSomething()
{
using namespace std;
cout << "Child::DoSomething" << endl;
}
};
void performSomething(Parent& parent)
{
parent.doSomething();
}
int main(int argc, char** argv)
{
Child myChild;
performSomething(myChild);
return 0;
}
Esto muestra Child::DoSomething
.
Como dije, estaba un poco sorprendido. Quiero decir, sé que pasar por referencia es como pasando punteros (pero estoy mucho más seguro a mi entender), pero no sabía que todavía tenía que mantener la bondad polimórfica al hacerlo.
Sólo quiero para asegurarse de que, es este supone que sucede o se trata de uno de esos "funciona en mi máquina" tipo de casos?
Eso no es lo que es "rebanar". Además, ¿ese código incluso compila? ¿Qué es 'using std;'? –
Significó que 'using namespace std'. Pensé que podía transmitir el mensaje, pero limpié el código para obtener un beneficio general para el sitio. – Anthony