1.3 函数重载在MFC中的应用举例
在一个类的内部,使用最频繁的重载函数是类的构造函数。因为类的构造函数一方面只能有一个名称(即类名),另一方面又要求它以多种形式构造,以便对不同的成员变量以不同的方式进行初始化。这样,为了给类的使用者以多种选择,就必然进行构造函数的重载。
例如MFC的文件操作封装类CFile,它定义了3个构造函数。如果需要先创建一个CFile类对象,以后再利用它打开一个文件;如果需要在构造CFile类对象的同时,将它与一个已经被打开的文件的句柄关联;如果需要在构造CFile类对象的同时,以某种方式打开一个指定的文件,在CFile类中都可以发现满足需要的构造函数。其构造函数声明如下:
CFile();/*创建一个CFile类对象,不关联任何文件。 以后可以调用该对象的成员函数CFile::Open()打开指定文件*/ CFile( int hFile );/*构造类对象的同时,关联一个文件句柄。 该句柄可以是由API函数OpenFile()返回的*/ CFile( LPCTSTR lpszFileName, UINT nOpenFlags );/*构造 类对象的同时,以nOpenFlags指定的方式,打开由lpszFileName指定的文件*/ |
又如绘图对象CBrush、CPen等,CBrush的构造函数如下:
CBrush();//先构造类对象,以后再对刷子初始化(如调用CBrush::CreateSolidBrush()等) CBrush(COLORREF crColor );//构造对象同时,为刷子指定颜色 CBrush(int nIndex, COLORREF crColor );//构造对象同时,为刷子指定影线风格和颜色 CBrush( CBitmap* pBitmap );//构造对象同时,为刷子指定位图 |
除构造函数外,其他函数的重载也常使用。例如设备环境类CDC的成员函数Select Object(),可能是MFC中重载版本最多的一个。不同的SelectObject()重载版本将不同的GDI对象选择到设备上下文中。函数声明如下:
CPen* SelectObject( CPen* pPen );//笔 CBrush* SelectObject( CBrush* pBrush );//刷子 virtual CFont* SelectObject( CFont* pFont );//字体 CBitmap* SelectObject( CBitmap* pBitmap );//位图 int SelectObject( CRgn* pRgn );//区域
|
在父类与子类之间,多数情况是子类重载父类定义的虚拟函数。关于MFC应用虚拟函数的讨论,参见2.6节。
【责任编辑:
夏书 TEL:(010)68476606】