Witam.
Mam następujący problem. Weźmy sobie takie klasy:
class A
class B : public A
class C : public B
Oraz zastosujmy do nich wzorzec prototyp.
Teraz wiadomo, że jeśli dysponuję wskaźnikiem na A to mogę sobie klonować dokładnie to na co ten wskaźnik wskazuje, niezależnie czy jest to w rzeczywistości typu A, B czy C. Ale załóżmy, że czasem też dysponuję wskaźnikami na B i wtedy chciałbym by metoda clone zwracała mi wskaźnik na B, a nie na A korzystając z sygnatury dziedziczonej po A metody wirtualnej.
Pytanie:
Czy poprawnym jest zadeklarowanie funkcji wirtualnej z klasy podstawowej o sygnaturze
virtual A* clone() const
W klasie pochodnej jako:
virtual B* clone() const
Czyli z innym typem zwracanym, tak aby to nie było żadne przesłonięcie tylko wirtualność dalej dobrze działała?
Generalnie sprawdziłem to i wydaje się być w porządku, ale nigdy się z czymś takim nie zetknąłem. Na zdrowy chłopski rozum wydaje się, że istnienie takiej możliwości nie powinno być problemem. Wydaje mi się natomiast, że chyba nie raz czytałem, że metoda implementująca powinna mieć taką samą sygnaturę jak metoda implementowana, także nie wiem czy jest to zgodne ze standardem.
Pozdrawiam,
Platyna