Si desea que este código tenga sentido:
Base* p = new Derived;
p->someMethod();
ya que el tipo estático de p
es Base*
es la firma de base que se utiliza en la llamada. El valor predeterminado se asigna y, al ser la función virtual, la llamada se redirige a Derivado.
Usted puede incluso tener que definen de manera diferente, si desea que su Derivado :: algunMetodo para recibir un valor diferente de Base*
en lugar de Derived*
...
Lo importante es el documento de estas "relaciones" bueno, ya que la la mayoría de los programadores no los entenderán a partir de una simple lectura del código.
Por supuesto, si todo lo que no es adecuado en su contexto particular, generando más confusión que otra cosa, evite los parámetros predeterminados en las funciones virtuales, y use el auxiliar no virtual para llamarlos adecuadamente.
Pero teniendo en cuenta también que, desde el punto de vista del lector, un parámetro predeterminado es más explicativo que una función de sobrecarga que llama privadamente a otra con una repetición de parámetros no legible.
Creo que se refería a const SomeStruct * t = 0? – marcinj
@luskan: 'SomeStruct' podría ser implícitamente convertible de' 0'. –
¿Qué quiere decir con "establecer el argumento predeterminado en virutal puro"? –