template <class Child>class A {public: // ну например Child Foo(){ return *this; }};class B: public A<B>{public: B(A<B>& parent){ /*...*/ }};
class A {};class B : public A{public: B(const A&){} // конструктор B с параметром A}void foo(B value);foo( A() );
class A {public: template<class T> T* getChild(){ return dynamic_cast<T*>(this); }}