Jeśli chcesz ten kod sensu:
Base* p = new Derived;
p->someMethod();
od statycznego typu p
jest Base*
to jest podpis bazowy, który jest używany na wezwanie. Wartość domyślna jest przypisana i jako funkcja wirtualna, połączenie jest przekierowywane do pochodnego.
Można nawet mieć je zdefiniowane inaczej, jeśli chcesz, aby Twój Pochodzące :: SomeMethod aby otrzymać inną wartość od Base*
zamiast Derived*
...
Ważną rzeczą jest dokumentem te „relacje” dobrze, ponieważ większość programistów nie zrozumie ich z prostej lektury kodu.
Oczywiście, jeśli wszystko, co nie pasuje do konkretnego kontekstu, powoduje więcej zamieszania niż w innych przypadkach, unikaj domyślnych parametrów funkcji wirtualnych i używaj pomocniczego, nie-wirtualnego, aby wywoływać je poprawnie.
Ale biorąc również pod uwagę, że - z punktu widzenia czytelnika - parametr domyślny jest bardziej wytłumaczalny niż funkcja przeciążania, wywołująca prywatnie inną z nieczytelną poprawką parametru.
Myślę, że miałeś na myśli const SomeStruct * t = 0? – marcinj
@luskan: 'SomeStruct' może być niejawnie wymienialny z' 0'. –
Co masz na myśli przez "ustaw domyślny argument na czysty wirtualny"? –