VC中類的強制性轉化,通過派生來控制自己想要的類

在c++入門的時候,常常看見很多類的強制性轉換,比如看看

CFrameWnd *pFrame = (CFrameWnd*)AfxGetMainWnd();

CView *pView = (CView*)pFrame->GetActiveView(); 再通過pView實現其他的操作等,爲什麼pView可以實現其他的操作呢?因爲很多的視圖類都從CView中繼承或派生來的,我們就可以通過其他類強制轉換到CView來實現。

通過這種方法我們可以實現自己的類派生,從而可以很方便的實現類的通訊。我們可以自己定義類如下:

1.定義一個父類:

class CDrawElement :public CObject

2.定義其他類:

 class CArc :public CDrawElement  //弧形

class CEllipse:public CDrawElement //橢圓

class CLine:public CDrawElement //直線

class CRectangle:public CDrawElement//矩形

class CText :public CDrawElement//文字

這些類都來自CDrawElement的派生

3.操作方法

   我們打算在程序中按照不同順序繪製各種上面的圖形,但是爲了對各種圖行的控制,對各種圖形記錄是有必要的,因此我們還需要自己定義一個鏈表 CPtrList m_ObjectList;  // 繪製圖像的鏈表

   看看我們是怎樣把圖形加入到鏈表中的

CLine* pLine=new CLine;
 m_ObjectList.AddTail(pLine); //加入直線

CEllipse* pEllipse=new CEllipse;
 m_ObjectList.AddTail(pEllipse); //加入橢圓

CRectangle* pRectangle=new CRectangle;
 m_ObjectList.AddTail(pRectangle);//加入矩形

CArc* pArc=new CArc;
 m_ObjectList.AddTail(pArc);//加入圓弧

CText* pText=new CText;
 m_ObjectList.AddTail(pText); //加入文字

對這些不同的圖形,我們怎麼去知道他們那種呢?呵呵,現在我們就可以通過強制轉換來知道了!

POSITION pos = m_ObjectList.GetHeadPosition();
 CDrawElement* pHitItem;
 while(pos != NULL)
 {
     pHitItem=(CDrawElement*)m_ObjectList.GetNext(pos); //通過這裏我們就可以控制我們的圖形了

}

以前也這樣用過!卻沒有發現這樣做的好處,只知道這樣做!不過今天發現了,雖然比較拙劣,但是也共享出來,至少是一種很好的方法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章