天天看點

函數指針在MFC中的應用

    馬上就過年了,希望奮鬥在一線的碼農順利收工,準備好年貨過大年!提前給大家拜個早年。本系列的第三篇來到了虛拟函數這塊,可能好多人看到這個概念就發怵,聽我慢慢講來......

     在實際的開發工作中,為了提高代碼的重用性,編寫通用的功能子產品,往往需要設計處理幾種不同對象的通用程式。下面給了例子

 照例給出0資源分下載下傳連結:http://download.csdn.net/detail/liquanhai/6880725

//顯示8進制數
CString DisplayOctal(const int Number)
{
	CString str;
	str.Format(_T("8進制顯示:0%o"),Number);
	return str;
}

//顯示10進制數
CString DisplayDecimal(const int Number)
{
	CString str;
	str.Format(_T("10進制顯示:%d"),Number);
	return str;

}

//顯示16進制數
CString DisplayHexadecimal(const int Number)
{
	CString str;
	str.Format(_T("16進制顯示:0x%x"),Number);
	return str;

}

//函數指針的定義
typedef CString(*pDisplayFunc)(const int);

//定義新的函數使用函數指針
CString DisplayNumber(pDisplayFunc pFuc,const int Number)
{
	return pFuc(Number);
}

void CMy20140124Dlg::OnBnClickedButton1()
{
	// TODO: Add your control notification handler code here

	CString str;
// 	 str=DisplayNumber(DisplayOctal,100);
// 	 str=DisplayNumber(DisplayDecimal,100);
	 str=DisplayNumber(DisplayHexadecimal,100);

	SetDlgItemText(IDC_NUM,str);

}
           

示例中的定義了一個通用函數DisplayNumber,功能是以各種格式顯示數字。兩個參數,一個是函數位址(即函數名稱),另一個就是需要顯示的數字。使用中隻需要傳遞适當的實參,函數就能正常工作。如果客戶的需求發生變化,如果要顯示2進制數,僅需要添加Void DispayBinary(const int Number)即可。 通用函數不用變化。顯然函數指針給函數增添了靈活性。

   這就是C++的動态聯編。編譯器在編譯階段并不能确切知道将要調用的函數,隻有在程式運作時才能确定将要調用的函數。

   作為虛拟函數的引入篇不能寫的過多,以免消化不了。接下來的一篇的一篇進入虛拟函數,敬請期待!