在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); //通過這裏我們就可以控制我們的圖形了
}
以前也這樣用過!卻沒有發現這樣做的好處,只知道這樣做!不過今天發現了,雖然比較拙劣,但是也共享出來,至少是一種很好的方法