【C语言学习笔记】C语言的int slice()和C++的int slice()


结论:C语言的int slice()和C++的int slice()是不同的。

实验:

可以看的在c语言中,是允许在声明函数的时候,使用函数原型int test(),里面不需要包含函数的参数,到函数实现的时候再补上函数的参数,但是这种行为是历史遗留的问题,不建议使用。

在C++中,当我们使用上述的代码,编译器会报错,因为函数声明时缺少参数,实际上c++中的int test()int test(void),即声明了一个test函数,它不接受参数。

深入思考:

通过该实验,我们可以发现,在c语言和c++中,函数的签名是不一样的。c语言的函数签名只有函数名,int test(int a, int b)的函数签名可以认为是_test,而在c++中,int test(int a, int b)的函数签名则是_test_int_int
由此,我们可以得知,c语言不支持函数重载。

发散思维:

在网上搜索资料的时候,看到这么一个解释:因为c语言不是面向对象的语言,所以不支持函数重载。
针对上述的观点,我想表达自己的观点:

  1. c语言支不支持函数重载和是否是面向对象语言没有关系。
  2. 函数重载实际上是面向方法的。

首先,针对观点1,我们通过上述的分析,可以知道c语言的函数签名只有函数名,从当初的设计上就注定无法支持函数重载。
其次,针对观点2,我们先看一下wiki对Function overloading的定义:
In some programming languages, function overloading or method overloading is the ability to create multiple functions of the same name with different implementations.
即函数名相同,函数实现不同,它的规则就是:函数名相同,但是参数的数量或者类型不一样。有的人可能会把函数重载和面向对象中的多态性弄混,实际上,函数重载的结果取决于参数,而我们在面向对象中所说的多态性一般是函数重写引起的,是取决于运行时的。

补充:

在Java中可以称函数重载(overload)为静态多态性、编译时多态性;称函数重写(override)(C++通过虚函数实现)为动态多态性、运行时多态性。

核心概念:

  • 函数签名
  • 函数重载
  • 函数重写
  • (动态)多态性
本文作者:bobozi的博客
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用BY-NC-SA许可协议。转载请注明出处!