C++ standard 2003. 10.3.5
typu powrotu nadrzędnego funkcji powinna być identyczna typ wartości Zastępowana funkcji lub kowariantna z klasami funkcji. Jeśli funkcja D :: F nadpisuje funkcję B :: F, podczas gdy zwrot rodzaje funkcji są kowariantna jeśli spełniają następujące kryteria:
- oba są wskaźniki do klas lub odniesień do klas
- klasa w rodzaju powrotnego B :: f jest tej samej klasy, klasy w zwracanego typu D :: f lub jest jednoznaczne i dostępne bezpośrednio lub pośrednio podstawy z klasy klasa w typ zwrotu D :: f
- oba wskaźniki lub odniesienia mają takie samo CV kwalifikacji i typ klasa w rodzaju powrotnego D :: f ten sam CV kwalifikacje jak lub mniej CV kwalifikacje niż typ klasy w typie zwrotu B :: f.
Jeżeli typ powrotu D :: f różni od rodzaju powrotnej B :: f typ klasa w rodzaju powrotnego D :: f jest zakończona w momencie zgłoszenia D :: f lub są typu klasy D. Jeżeli nadrzędny jest wywoływana w końcowym overrider funkcji zastąpionej, wynik jest przekształcany do rodzaju zwróconego przez (statycznie wyboru) zastąpionej funkcji (5,2 .2).
przykład:
class B {};
class D : private B { friend class Derived; };
struct Base {
virtual B* vf4();
virtual B* vf5();
};
class A;
struct Derived : public Base {
D* vf4(); // OK: returns pointer to derived class
A* vf5(); // error: returns pointer to incomplete class
};
Czym dokładnie jest pytanie? Jeśli znasz termin * kowariancja *, to prawdopodobnie wiesz, co to znaczy. Tak więc odpowiedź brzmi: kowariantne typy zwrotów są dozwolone. to jest to! – AnT
Tylko jeden link dla osób nieobjętych kowariantnym typem zwrotu: http://pl.wikipedia.org/wiki/Covariant_return_type –
Zasada nr 1 zwrotów kowariantnych - nie używaj VC6. –