C++函数重载

函数重载

函数重载:
    用同一个函数名定义不同的函数
    当函数名和不同的参数搭配时函数的含义不同
        int func(int x)
        {
            return x;
        }

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

        int func(const char* s)
        {
            return strlen(s);
        }

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

   int func(int x)
    {
         return 0;
    }

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

    int func(const char* s)
    {
        return strlen(s);
    }

    int main(int arg,char *argv[])
    {
        printf("%d\n",func(3)); //3
        printf("%d\n",func(4,5));   //9
        printf("%d\n",func("zhuweican"));   //9
    }

函数重载的条件:
    函数重载至少满足下面的一个条件:
        1、函数个数不同
        2、参数类型不同
        3、参数顺序不同

c++中的函数重载,编译器调用重载函数的准则
    1、将所有同名函数作为候选者
    2、尝试寻找可行的候选函数
        1、精确匹配实参
        2、通过默认参数能够匹配实参
        3、通过默认类型转换匹配实参
匹配失败:
    1、最终寻找到的候选函数不唯一,则出现二义性,编译失败
    2、无法匹配所有候选者,函数未定义,编译失败

函数重载的注意事项
    1、重载函数在本质上是相互独立的不同函数
    2、重载函数的函数类型不同
    3、函数返回值不能作为函数重载的依据

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

重载函数遇上函数指针:
    1、将重载函数名赋值给函数指针时
        1、根据重载规则挑选与函数指针参数列表一致的候选者
        2、严格匹配候选者的函数类型与函数指针的函数类型
eg:
#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);
 }
重载与指针
 注意:
    1、函数重载必然发生在同一个作用域中
    2、编译器需要参数列表或函数类型进行函数选择
    3、无法直接通过函数名得到重载函数的入口地址

c++和C相互调用
    1、实际工程中C++和C代码相互调用是必不可免的
    2、C++编译器能够兼容C语言的编译方式
    3、C++编译器会优先使用C++编译的方式
    4extern 关键字能够强制让C++编译器进行C方式的编译

问题:如何保证一段C代码只会以C的方式编译??
 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值