十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
1.从C语言的语法设计来说是不支持的,早期的C编译器未考虑过函数重载这一功能,所以就会有那么多类似的函数abs,labs,fabs等等(每种类型都要考虑一个不同的函数名)。\x0d\x0a2.C语言标准就规定不允许同一作用域中两个函数重名。和C语言相关的域有两种,一个是给编译器看得,还有一种是给链接器看的,而给编译器看的这种域主要是关于\x0d\x0a变量的可见范围,而链接器看到的那个是叫文件域,而全局域可能要跨越好几个文件域,这样只要两个同名函数用static修饰,并且在不同的文件中,就不会\x0d\x0a冲突。不过这个实际上已经超越了编译器的范围,表面看起来两个函数同名,但是实际上编译器为链接器产生是指向的同一个函数地址。 \x0d\x0a3.函数重载是一个编译期行为,主要是通过name mangling来产生不同的汇编符号,让linker可以正确的link代码。\x0d\x0a4.但是,C语言作为一个具有超强功能的底层语言,是有办法进行模拟函数重载的。那就是函数指针。最简单的例子就是qsort函数。这个函数可以传递一个函数指针变量,通过不同的函数指针,可以对不同的数据类型就行相同的qsort操作,从某种层面来说相当于函数重载。
成都创新互联从2013年创立,是专业互联网技术服务公司,拥有项目成都做网站、网站制作网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元新郑做网站,已为上家服务,为新郑各地企业和个人服务,联系电话:13518219792
重载函数
重载,英文为overloading,大概就是很多个的意思。
举个例子,比如,我需要个函数。
取2个int的最大值。很容易,函数接口应该是
(1) int max(int a, int b);
那更进一步,我取3个 int 的最大值呢,接口可以定义为
(2) int max(int a, int b, int c);
对比 函数(1), (2), 的名字,是一样的,都叫 max,就只有参数的个数不同。这是函数重载。
那现在,我需要取两个float的最大值呢,接口也可以定义为
(3) float max(float a, float b);
对比 函数(1),(3), 名字也是一样的,叫max。参数个数也是一样的。不过参数的类型不同。这也是函数重载。
c语言写重载函数:
首先明确重载函数的定义:在相同的声明域中的函数名相同的,而参数表不同的,即通过函数的参数表而唯一标识并且来区分函数的一种特殊的函数。
当将要定义一组函数,使它们执行一系列的操作,但是它们是应用在不同的参数类型上的。此时可以选择重载函数。
例如:
上面的三个函数都可以大概地说成判断一组数中的最大值,对于函数的用户来说,他们并不关心函数定义的细节,也就是说他们不关心判断两个整数的大小和判断数组(vector容器)数的大小应该使用不同的函数,而对于程序的设计者来说这可是不得不想到的。程序员必须记住并查找每个函数名。而函数的重载把程序员从这种问题的复杂性中解放了出来,C++提供了这种支持。
上面的三个比较大小的函数可以定义成:
通过参数就可以一眼分辨不同的函数。