VC中类的强制性转化,通过派生来控制自己想要的类

时间:2023-01-02 19:58:21

在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); //通过这里我们就可以控制我们的图形了

}

以前也这样用过!却没有发现这样做的好处,只知道这样做!不过今天发现了,虽然比较拙劣,但是也共享出来,至少是一种很好的方法