C++函数重载在MFC中的应用挖掘

      这个系列用几篇简单的博文回顾,通过MFC来挖掘C++的各种编程思想。进而进一步体验C++各种关键语法是怎么灵活运用的。开篇从最简单的函数重载启程吧!

目的:

为了减轻程序员记忆函数名称的负担,增强代码的可读性,C++编译器允许在相同作用域(全局或某类)内定义两个以上的同名函数

重要说明:

重载函数是以参数类型或者参数个数加以区别的。每个重载函数可以有不同的返回值类型,不过函数的返回值对区别重载函数没有意义。

典型应用:

在类的内部,使用最频繁的重载函数是类的构造函数。因为类的构造函数一方面仅有一个名称(即类名),另一方面又要求以多种形式构造,以便于以不同的成员变量以不同的方式进行初始化。这样,为了给类的使用者以多种选择,就必然进行构造函数的重载。

class CFile : public CObject
{
public:
.............

// Constructors
    CFile();//创建一个file对象不关联任何文件,以后调用CFile::Open()打开指定文件
    CFile(HANDLE hFile);//构造对象时,关联一个文件句柄。该句柄可以是API OpenFile()返回的
    CFile(LPCTSTR lpszFileName, UINT nOpenFlags);//构造对象时,以nOpenFlags指定方式,打开lpszFileName指定的文件

.........
};
class CPen : public CGdiObject
{
public:
// Constructors
	CPen();//先构造CPen对象,然后调用CreatePen初始化
	CPen(int nPenStyle, int nWidth, COLORREF crColor);////使用指定的样式、宽度和画笔属性创建一个CPen对象
	CPen(int nPenStyle, int nWidth, const LOGBRUSH* pLogBrush,int nStyleCount = 0, const DWORD* lpStyle = NULL);
	BOOL CreatePen(int nPenStyle, int nWidth, COLORREF crColor);//使用指定的样式、宽度和颜色创建一个画笔,并附加到已经存在的对象。
	BOOL CreatePen(int nPenStyle, int nWidth, const LOGBRUSH* pLogBrush,int nStyleCount = 0, const DWORD* lpStyle = NULL);
	BOOL CreatePenIndirect(LPLOGPEN lpLogPen);//在给定的样式、宽度和颜色创建一个画笔在 LOGPEN 结构,并将它附加到 CPen 对象。
.......................
};



有关重载函数问题,还有不少用在类的其它函数中,例如CDC的SelectObject(),这个可能是MFC类库中重载版本最多的一个。

class CDC : public CObject
{
.......
public:
	virtual CGdiObject* SelectStockObject(int nIndex);
	CPen* SelectObject(CPen* pPen);
	CBrush* SelectObject(CBrush* pBrush);
	virtual CFont* SelectObject(CFont* pFont);
	CBitmap* SelectObject(CBitmap* pBitmap);
	int SelectObject(CRgn* pRgn);       // special return for regions
	CGdiObject* SelectObject(CGdiObject* pObject);
.......
}


至此函数重载已经讲完了,不知道读者还有什么需要补充进来的,欢迎大家补充!

可能细心的读者还有疑问,是否可以重载已经存在的函数,例如printf,MessageBox,fprintf,strcpy等等,这个是完全没有问题的,不行可以试试,都可以按照自己的写法来重载C++标准函数库的这些函数。

 想知道后面会发生什么样的事情和解决方案,请看下一篇:



C++函数重载在MFC中的应用挖掘

上一篇:Photoshop 制作网站468*60 Banner教程


下一篇:Painter菜鸟教程之鼠标篇:运用鼠标绘画制作技巧