你所没有认识到的C++:虚拟函数引入篇之函数指针

    马上就过年了,希望奋斗在一线的码农顺利收工,准备好年货过大年!提前给大家拜个早年。本系列的第三篇来到了虚拟函数这块,可能好多人看到这个概念就发怵,听我慢慢讲来......

     在实际的开发工作中,为了提高代码的重用性,编写通用的功能模块,往往需要设计处理几种不同对象的通用程序。下面给了例子

 照例给出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++的动态联编。编译器在编译阶段并不能确切知道将要调用的函数,只有在程序运行时才能确定将要调用的函数。

   作为虚拟函数的引入篇不能写的过多,以免消化不了。接下来的一篇的一篇进入虚拟函数,敬请期待!

你所没有认识到的C++:虚拟函数引入篇之函数指针

上一篇:if判断语句


下一篇:python爬虫实践之模拟登录