我們來談一下重載C++標(biāo)準(zhǔn)庫函數(shù)時(shí)候會(huì)發(fā)生什么樣的問題呢?接下來會(huì)通過重載MFC的MessageBox讓你知道不一樣的MFC。
一、messagebox的原始調(diào)用方法
我們隨便新建一個(gè)MFC的對話框工程,先給出兩種messagebox的調(diào)用方法,如下所示:
void CMy200Dlg::OnBnClickedButton1()
{
//1. 調(diào)用CMy200Dlg類基類CWnd的方法MessageBox
MessageBox(_T("CWnd's method!"),_T("123!"),0);
//2. 調(diào)用windows API的MessageBox function
::MessageBox(NULL,_T("API funtion!"),NULL,0);
}
二、CMy200Dlg類中對messagebox方法的重載
下面來改造MessageBox這個(gè)函數(shù),第1種是在CMy200Dlg這個(gè)類中重載
//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. 調(diào)用CMy200Dlg類基類CWnd的方法MessageBox
CWnd::MessageBox(_T("CWnd's method!"),_T("123!"),0);
//方法2. 調(diào)用windows API的MessageBox function
::MessageBox(NULL,_T("API funtion!"),NULL,0);
//方法3. 調(diào)用重載的MessageBox()
MessageBox();
}
為什么1.中的MessageBox必須加上CWnd::限定符,因?yàn)樵贑My200Dlg中重載了MessageBox后會(huì)對基類的函數(shù)進(jìn)行覆蓋,這個(gè)是必須要引起注意的。
三、全局中對messagebox方法的重載
下面繼續(xù)來重載MessageBox這個(gè)函數(shù),第2種是在全局中進(jìn)行重載
int CMy200Dlg::MessageBox()
{
int a=0,b=1;
return a+b;
}
int MessageBox(int aa,int bb)
{
return aa*bb;
}
void CMy200Dlg::OnBnClickedButton1()
{
//1. 調(diào)用CMy200Dlg類基類CWnd的方法MessageBox
CWnd::MessageBox(_T("CWnd's method!"),_T("123!"),0);
//2. 調(diào)用windows API的MessageBox function
::MessageBox(NULL,_T("API funtion!"),NULL,0);
//3. 調(diào)用重載的MessageBox()
MessageBox();
//4. 調(diào)用重載的全局函數(shù) MessageBox(int aa,int bb)
::MessageBox(20,14);
}
記住全局函數(shù)的調(diào)用加上::作用域符號(hào)就可以了。
四、結(jié)論:
一個(gè)知識(shí)點(diǎn)的靈活運(yùn)用關(guān)鍵是勤動(dòng)手,多調(diào)試,多去思考和總結(jié)。作為上一篇函數(shù)的重載就這樣講完了,但是子類對基類的覆蓋這個(gè)概念沒有展開來說,留給以后再去細(xì)說吧 www.yztrans.com