馬上就過年了,希望奮鬥在一線的碼農順利收工,準備好年貨過大年!提前給大家拜個早年。本系列的第三篇來到了虛拟函數這塊,可能好多人看到這個概念就發怵,聽我慢慢講來......
在實際的開發工作中,為了提高代碼的重用性,編寫通用的功能子產品,往往需要設計處理幾種不同對象的通用程式。下面給了例子
照例給出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++的動态聯編。編譯器在編譯階段并不能确切知道将要調用的函數,隻有在程式運作時才能确定将要調用的函數。
作為虛拟函數的引入篇不能寫的過多,以免消化不了。接下來的一篇的一篇進入虛拟函數,敬請期待!