1、函数重载分析(下)

1、函数重载分析(下)
    1、重载与指针
        1、下面函数指针保存哪一个函数的地址?

        int fun(int x)
        {
            return x;
        }
        int fun(int a, int b)
        {
            return a + b;
        }
        int fun(const char *s)
        {
            return strlen(s);
        }
        //
        int c;
        typedef (int)(*PFUN)(int a);
        PFUN p= fun;
        c = p(1);//调用哪一个 fun
        2、函数重载遇上函数指针。将函数重载函数名赋值给函数指针时:
            1、根据重载规则挑选和函数指针参数列表一致的候选者。
            2、严格匹配候选者的函数类型和函数指针类型。
        3、注意:
            1、函数重载必须发生在同一个作用域内。
            2、编译器需要用参数列表和函数类型进行函数选择。
            3、无法通过函数名得到重载函数的函数入口。
2、如何保证一段C代码只会以C语言的方式编译?
    代码:
        #ifndef __cplusplus
        extern "C"
        {
        #endif
        //按照C编译的代码

        #ifndef __cplusplus
        }
        #endif
    注意事项:
        1、C++编译器不能以C的方式编译重载函数。
        2、编译方式决定了函数名被编译后的目标名。
        3、C++编译方式将函数名和参数列表编译成目标名。
        4、C编译方式只将函数名编译成目标名。
小结:
    1、函数重载时C++对C的一个重要升级。
    2、函数重载通过参数列表区分不同的相同函数。
    3、extern 能够实现C和C++之间的相互调用。
    4、编译方式决定了符合表中的函数名的最终目标名。
    5、extern "C"{}中的代码块不能包含函数重载。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值