仮想関数のオーバーライドにおいて、返り値の型
オーバーライドされる関数の返り値が、あるクラスのポインタ、もしくは参照であるとき、オーバーライドする関数の返り値の型は、派生クラスのポインタ、もしくは派生クラスの参照でもOKです。
つまり、以下のようなことができるということです。
struct RetBase{ RetBase(){} virtual ~RetBase(){} }; struct RetDerived : public RetBase{ RetDerived(){} virtual ~RetDerived(){} }; struct Base{ Base(){} virtual ~Base(){} virtual RetBase* hoge(){}; virtual RetBase& piyo(){}; }; struct Derived : public Base{ Derived(){} virtual ~Derived(){} virtual RetDerived* hoge(){}; virtual RetDerived& piyo(){}; };