C语言中重载函数如何实现?

2026-04-16 23:051阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计933个文字,预计阅读时间需要4分钟。

C语言中重载函数如何实现?

1. 什么是重载函数?重载函数是指在同一作用域内,允许存在多个同名函数,但它们的参数列表(参数的数量或类型)必须不同。当函数名相同,但参数不同时,编译器会根据参数列表来决定调用哪个函数。例如:pythondef add(a, b): return a + b

C语言中重载函数如何实现?

def add(a, b, c): return a + b + c

1、什么是重载函数

  同一个函数名定义不同的函数,当函数名相同,不同的参数搭配时含义不同。

  例如:

  

#include <stdio.h> #include <string.h> int func(int x) { return x; } int func(int x,int y) { return x + y; } int func(const char *s) { return strlen(s); } int main(int argc, char *argv[]) { printf("Begin...\n"); printf("%d\n" ,func(1)); printf("%d\n" ,func(2,3)); printf("%d\n" ,func("abcdefg")); printf("End...\n"); return 0; }

  运行结果:

Begin... 1 5 7 End...

  上面代码函数名相同,在C语言中是肯定会报错的因为C语言不支持重载函数。而在C++中是不会报错的。而且会根据参数 调用 对应的函数。

2、允许重载的条件是什么了?

  2.1、参数类型不同

  2.2、参数个数不同

  2.3、参数顺序不同

  三个条件满足其中一条即可满足重载。

  例如:下面代码中的两个 func 就满足第 2.3条 参数顺序不同  

#include <stdio.h> #include <string.h> int func(const char *s ,int a) { return a; } int func(int a,const char *s ) { return strlen(s); } int main(int argc, char *argv[]) { printf("Begin...\n"); printf("%d\n",func("abc",2)); printf("%d\n",func(2,"abc")); printf("End...\n"); return 0; }

  运行结果:

Begin... 2 3 End...

3、编译器调用重载的准则:

  3.1、将所有同名的函数作为候选

  3.2、尝试寻找可行的候选参数

    3.2.1、精确匹配实参

    3.2.2、通过默认参数能够匹配实参

    3.2.3、通过默认类型转换匹配实参

匹配失败的原因:

  1、最终找出来的候选函数不唯一,出现二义性,编译失败。

  例如:这里调用 printf("%d\n" func(1,2)); 的时候 就有两个条件可以匹配所以编译器也不知道应该调用那个函数。

#include <stdio.h> #include <string.h> int func(int a,int b) { return a + b; } int func(int a,int b,int c=10) { return a+b+c; } int main(int argc, char *argv[]) { printf("Begin...\n"); printf("%d\n" func(1,2)); printf("End...\n"); return 0; }

 编译结果:

test.cpp:18:25: error: call of overloaded ‘func(int, int)’ is ambiguous printf("%d\n" ,func(1,2)); ^ test.cpp:4:5: note: candidate: int func(int, int) int func(int a,int b) ^~~~ test.cpp:9:5: note: candidate: int func(int, int, int) int func(int a,int b,int c=10) ^~~~

  2、无法匹配所有候选者,函数未定义,编译失败

4、函数重载的注意事项。

  4.1、重载函数在本质上是相互独立的函数

  4.2、重载函数的函数类型不同

  4.3、函数返回值不能作为函数重载的依据

 函数重载是由函数名 和参数列表决定的。    

本文共计933个文字,预计阅读时间需要4分钟。

C语言中重载函数如何实现?

1. 什么是重载函数?重载函数是指在同一作用域内,允许存在多个同名函数,但它们的参数列表(参数的数量或类型)必须不同。当函数名相同,但参数不同时,编译器会根据参数列表来决定调用哪个函数。例如:pythondef add(a, b): return a + b

C语言中重载函数如何实现?

def add(a, b, c): return a + b + c

1、什么是重载函数

  同一个函数名定义不同的函数,当函数名相同,不同的参数搭配时含义不同。

  例如:

  

#include <stdio.h> #include <string.h> int func(int x) { return x; } int func(int x,int y) { return x + y; } int func(const char *s) { return strlen(s); } int main(int argc, char *argv[]) { printf("Begin...\n"); printf("%d\n" ,func(1)); printf("%d\n" ,func(2,3)); printf("%d\n" ,func("abcdefg")); printf("End...\n"); return 0; }

  运行结果:

Begin... 1 5 7 End...

  上面代码函数名相同,在C语言中是肯定会报错的因为C语言不支持重载函数。而在C++中是不会报错的。而且会根据参数 调用 对应的函数。

2、允许重载的条件是什么了?

  2.1、参数类型不同

  2.2、参数个数不同

  2.3、参数顺序不同

  三个条件满足其中一条即可满足重载。

  例如:下面代码中的两个 func 就满足第 2.3条 参数顺序不同  

#include <stdio.h> #include <string.h> int func(const char *s ,int a) { return a; } int func(int a,const char *s ) { return strlen(s); } int main(int argc, char *argv[]) { printf("Begin...\n"); printf("%d\n",func("abc",2)); printf("%d\n",func(2,"abc")); printf("End...\n"); return 0; }

  运行结果:

Begin... 2 3 End...

3、编译器调用重载的准则:

  3.1、将所有同名的函数作为候选

  3.2、尝试寻找可行的候选参数

    3.2.1、精确匹配实参

    3.2.2、通过默认参数能够匹配实参

    3.2.3、通过默认类型转换匹配实参

匹配失败的原因:

  1、最终找出来的候选函数不唯一,出现二义性,编译失败。

  例如:这里调用 printf("%d\n" func(1,2)); 的时候 就有两个条件可以匹配所以编译器也不知道应该调用那个函数。

#include <stdio.h> #include <string.h> int func(int a,int b) { return a + b; } int func(int a,int b,int c=10) { return a+b+c; } int main(int argc, char *argv[]) { printf("Begin...\n"); printf("%d\n" func(1,2)); printf("End...\n"); return 0; }

 编译结果:

test.cpp:18:25: error: call of overloaded ‘func(int, int)’ is ambiguous printf("%d\n" ,func(1,2)); ^ test.cpp:4:5: note: candidate: int func(int, int) int func(int a,int b) ^~~~ test.cpp:9:5: note: candidate: int func(int, int, int) int func(int a,int b,int c=10) ^~~~

  2、无法匹配所有候选者,函数未定义,编译失败

4、函数重载的注意事项。

  4.1、重载函数在本质上是相互独立的函数

  4.2、重载函数的函数类型不同

  4.3、函数返回值不能作为函数重载的依据

 函数重载是由函数名 和参数列表决定的。