函数重载

函数重载遇上默认参数;

#include<stdio.h>
#include<string.h>

int fun(int a, int b, int c = 0)
{
    return a * b * c;  
}

int fun(int a, int b)
{
    return a + b ;  
}

int main(void)
{

    int c =  fun(1,2);

    return 0;
}

编译器报错,因为 int c = fun(1,2);  这里调用两个函数都可以,所以编译器会报错;

当函数默认参数和函数重载相冲突时,编译器会报错;

这是C++的问题,C++引用了很多特性,特性之间会冲突;后续语言java和C#,他们就没有默认参数这种特性;C++众多的特性有可能是相互冲突的;

函数重载的本质,函数重载是由函数名和参数列表决定的;重载函数在本质上是相互独立不同函数;重载函数的函数类型不同;函数的返回值不能作为函数重载的依据;

 1 #include<stdio.h>
 2 
 3 int add(int a, int b)
 4 {
 5     return a + b;
 6 }
 7 int add(int a, int b, int c)
 8 {
 9     return a + b + c;
10 }
11 
12 int main(int argc, char **argv)
13 {
14     printf("(int(*)(int,int))add = %p
", (int(*)(int,int))add);
15     printf("(int(*)(int,int,int))add = %p
", (int(*)(int,int,int))add);
16     return 0;
17 }
(int(*)(int,int))add = 0x8048474
(int(*)(int,int,int))add = 0x8048482

注意:

函数重载必须发生在同一个作用域里面

编译器需要参数列表或函数类型进行函数选择;

无法直接通过函数名得到重载函数的入口地址;

C++调用C代码

extern关键字可以, C++编译器定义了__cplusplus

原文地址:https://www.cnblogs.com/yr-linux/p/6415597.html