#include "stdafx.h" #include <iostream> using namespace std; class Base { public: void SayHi(){ PrintClassName(); } protected: void PrintClassName() { cout << "My class name:/tBase" << endl; } }; class D1 :public Base { protected: void PrintClassName() { cout << "My class name:/tD1" << endl; } }; class D2:public Base { }; template <class T> class BaseT { public: void SayHi() { T* pT = static_cast<T*>(this); pT->PrintClassName(); } protected: void PrintClassName(){ cout << "My class name:/tBaseT" << endl; } }; class TD1 :public BaseT<TD1> { public: //protected: void PrintClassName(){ cout << "My class name:/tTD1" << endl;} }; class TD2 : public BaseT<TD2> { }; class TD3 : public BaseT<TD3> { }; int _tmain(int argc, _TCHAR* argv[]) { D1 d1; D2 d2; d1.SayHi(); d2.SayHi(); //--------- TD1 td1; TD2 td2; td1.SayHi(); td2.SayHi(); //---- TD3 td3; td3.SayHi(); return 0; }