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