【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语言不是面向对象的语言,所以不支持函数重载。
针对上述的观点,我想表达自己的观点:
- c语言支不支持函数重载和是否是面向对象语言没有关系。
- 函数重载实际上是面向方法的。
首先,针对观点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许可协议。转载请注明出处!