在MFC中以MessageBox来体会函数重载

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liquanhai/article/details/18258809

   上篇博文谈到了C++函数重载在MFC类库中的一些体现,可能你会说这些我都知道。是的,上面那篇仅仅是个切入点,紧接上篇,我们来谈一下重载C++标准库函数时候会发生什么样的问题呢?接下来会通过重载MFC的MessageBox让你知道不一样的MFC。  0积分代码下载地址:http://download.csdn.net/detail/liquanhai/6847697

一、messagebox的原始调用方法

我们随便新建一个MFC的对话框工程,先给出两种messagebox的调用方法,如下所示:


void CMy200Dlg::OnBnClickedButton1()
{
	//1. 调用CMy200Dlg类基类CWnd的方法MessageBox
	MessageBox(_T("CWnd's method!"),_T("123!"),0);
	//2. 调用windows API的MessageBox function
	::MessageBox(NULL,_T("API funtion!"),NULL,0);
}

二、CMy200Dlg类中对messagebox方法的重载

下面来改造MessageBox这个函数,第1种是在CMy200Dlg这个类中重载

//d:\My Documents\Visual Studio 2005\Projects\200\200\200Dlg.h
class CMy200Dlg : public CDialog
{
public:
    int MessageBox();
};

//d:\My Documents\Visual Studio 2005\Projects\200\200\200Dlg.cpp
int  CMy200Dlg::MessageBox()
{
	int a=0,b=1;
	return a+b;
}
void CMy200Dlg::OnBnClickedButton1()
{
	//方法1. 调用CMy200Dlg类基类CWnd的方法MessageBox
	CWnd::MessageBox(_T("CWnd's method!"),_T("123!"),0);
	//方法2. 调用windows API的MessageBox function
	::MessageBox(NULL,_T("API funtion!"),NULL,0);
	//方法3. 调用重载的MessageBox()
	MessageBox();
}
为什么1.中的MessageBox必须加上CWnd::限定符,因为在CMy200Dlg中重载了MessageBox后会对基类的函数进行覆盖,这个是必须要引起注意的。

三、全局中对messagebox方法的重载

    下面继续来重载MessageBox这个函数,第2种是在全局中进行重载

int  CMy200Dlg::MessageBox()
{
	int a=0,b=1;
	return a+b;
}
int  MessageBox(int aa,int bb)
{
	return aa*bb;

}
void CMy200Dlg::OnBnClickedButton1()
{
	//1. 调用CMy200Dlg类基类CWnd的方法MessageBox
	CWnd::MessageBox(_T("CWnd's method!"),_T("123!"),0);
	//2. 调用windows API的MessageBox function
	::MessageBox(NULL,_T("API funtion!"),NULL,0);
	//3. 调用重载的MessageBox()
	MessageBox();
	//4. 调用重载的全局函数 MessageBox(int aa,int bb)
	::MessageBox(20,14);
}
 记住全局函数的调用加上::作用域符号就可以了。

   

四、结论:

一个知识点的灵活运用关键是勤动手,多调试,多去思考和总结。作为上一篇函数的重载就这样讲完了,但是子类对基类的覆盖这个概念没有展开来说,留给以后再去细说吧。

0积分代码下载地址:http://download.csdn.net/detail/liquanhai/6847697


猜你喜欢

转载自blog.csdn.net/liquanhai/article/details/18258809