马上就过年了,希望奋斗在一线的码农顺利收工,准备好年货过大年!提前给大家拜个早年。本系列的第三篇来到了虚拟函数这块,可能好多人看到这个概念就发怵,听我慢慢讲来......
在实际的开发工作中,为了提高代码的重用性,编写通用的功能模块,往往需要设计处理几种不同对象的通用程序。下面给了例子
照例给出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++的动态联编。编译器在编译阶段并不能确切知道将要调用的函数,只有在程序运行时才能确定将要调用的函数。
作为虚拟函数的引入篇不能写的过多,以免消化不了。接下来的一篇的一篇进入虚拟函数,敬请期待!