8-9-函数重载overload

来源:互联网 发布:当网络写手挣钱吗 编辑:程序博客网 时间:2024/06/07 18:42

1、函数重载

这里写图片描述

2、函数重载条件

这里写图片描述
合法的,
只有返回值不同,是不能确定为函数重载的
但是,当重载遇上指针时,重载函数要严格要求匹配参数和返回值类型

3、

这里写图片描述
编译器报错,不会调用,出现二意性

4、

这里写图片描述

5、函数重载的本质

这里写图片描述

#include <stdio.h>int add(int a, int b)  // int(int, int){    return a + b;}int add(int a, int b, int c) // int(int, int, int){    return a + b + c;}int main(){    printf("%p\n", (int(*)(int, int))add);//通过函数类型获取重载地址    printf("%p\n", (int(*)(int, int, int))add);    return 0;}打印两个函数入口地址,发现重载的函数入口地址是不同的,证明两个函数是不同的

6、小结

这里写图片描述

7、重载与指针

这里写图片描述
第一个

#include <stdio.h>#include <string.h>int func(int x){    return x;}int func(int a, int b){    return a + b;}int func(const char* s){    return strlen(s);}typedef int(*PFUNC)(int a);int main(int argc, char *argv[]){    int c = 0;    PFUNC p = func;    c = p(1);   //重载遇到指针时,严格匹配参数和返回值类型    printf("c = %d\n", c);    return 0;}

8、

这里写图片描述

9、

这里写图片描述

10、

这里写图片描述

11、

这里写图片描述

#ifdef __cplusplusextern "C" {#endif#include "add.h"#ifdef __cplusplus}#endif

此方法既能保证 代码在C编译器通过又能保证在C++编译器下通过,都是按照C的编译方式来编译

12、

这里写图片描述
使用 nm命令可以查看编译过后的文件中 函数命
g++ -c test.cpp -o test.o
nm test.o

int add(int a, int b){    return a + b;}int add(int a){    return a;}const char* add(const char* a){    return "abcd";}0000000000000014 T _Z3addi0000000000000000 T _Z3addii0000000000000020 T _Z3addPKc

13、

这里写图片描述