ho queste classi:C++ il polimorfismo e di default argomento
class Base
{
public:
virtual void foo(int x = 0)
{
printf("X = %d", x);
}
};
class Derived : public Base
{
public:
virtual void foo(int x = 1)
{
printf("X = %d", x);
}
};
Quando ho:
Base* bar = new Derived();
bar->foo();
La mia uscita è "X = 0", anche se foo è chiamata dal derivato, ma quando Ho:
Derived* bar = new Derived();
bar->foo();
La mia uscita è "X = 1". Questo comportamento è corretto? (Per selezionare il valore del parametro predefinito dal tipo di dichiarazione, anziché selezionarlo dal tipo di oggetto effettivo). Questo rompe il polimorfismo del C++?
Può causare molti problemi se qualcuno utilizza le funzioni virtuali senza specificare il parametro della funzione effettiva e utilizza il parametro predefinito della funzione.
inserire qualcosa nel printf() che in realtà indica quale funzione viene chiamata – Ferruccio
È chiaro che la funzione chiamata è Derivata :: pippo – Felics
Come? entrambi stampano qualcosa come "X = valore". Non è possibile utilizzare il valore per determinare quale viene chiamato. Prova a stampare "Base: X =% d" nella base e sarai in grado di dire quale viene chiamato. – Ferruccio