8-9-函数重载overload

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 __cplusplus
extern "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 _Z3addi
0000000000000000 T _Z3addii
0000000000000020 T _Z3addPKc
13、

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值