问一个模板类的有关问题,请进

问一个模板类的问题,请进
先敲一段代码先

class   CA:public   CTreeView,CAExt <int>
{
      void   CTestView::OnInitialUpdate()
      {
CTreeView::OnInitialUpdate();
CTreeViewExt <int> ::OnInitialUpdate();
      }
      LONG   CTestView::OnDataAvailable(WPARAM   wParam,   LPARAM   lParam)
      {
return   CTreeViewExt <int> ::OnDataAvailable(wParam,   lParam);
      }
//以下三个函数的具体实现过程省略
      CTreeCtrl&   GetTreeCtrl()   const   {   return   CTreeView::GetTreeCtrl();   }
      virtual   void   GetRootItems(list <TreeData> &   List);
      virtual   void   GetChildItems(list <TreeData> ::iterator   it,   list <TreeData> &   List);
}

template   <class   T>
class   CAExt
{

static   UINT   InitialThreadProc(LPVOID   pData)
{
ASSERT(pData!=NULL);
CTreeViewExt*   pThis   =   static_cast <CTreeViewExt*> (pData);
ASSERT(pThis!=NULL);
return   pThis-> ThreadProc();
}

        OnInitialUpdate()
        {
                  AfxBeginThread(InitialThreadProc,   (LPVOID)this,THREAD_PRIORITY_LOWEST);
          }
//以下是三个纯虚函数
virtual   void   GetRootItems(list <TreeData> &   List)   =   0;
virtual   void   GetChildItems(list <TreeData> ::iterator   it,   list <TreeData> &   List)   =   0;
virtual   CTreeCtrl&   GetTreeCtrl()   const   =   0;
//下面两个函数的具体过程省略
            ThreadProc()
            {
                        //这里调用了GetRootItems,GetChildItems,GetTreeCtrl
              }
            OnDataAvailable()
            {
                        //这里调用了GetRootItems,GetChildItems,GetTreeCtrl
              }
}
我想问的是
1.CTreeViewExt*   pThis   =   static_cast <CTreeViewExt*> (pData);里的pData,也就是this,指向的是CA还是CAExt
2.ThreadProc和OnDataAvailable怎么可以调用GetRootItems,GetChildItems,GetTreeCtrl,他们不是都是纯虚函数么,还是因为它们都是调用CA里的GetRootItems,GetChildItems,GetTreeCtrl,请指教

------解决方案--------------------
1。既然是指针,指向CA和CAExt没有区别。起始地址是一样的。
2。纯虚函数,自动调用子类的函数。