编程论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

界面工厂编程视频教程广告联系qq1031180668广告位
查看: 628|回复: 0

[c/c++] c++对c语言的扩展-函数重载

[复制链接]
  • ta_mind

    5 天前
  • classn_01: 68 classn_02

    [LV.6]常住居民II

    884

    主题

    1604

    帖子

    3106

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    3106

    最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

    发表于 2018-1-12 22:33:39 | 显示全部楼层 |阅读模式
    首先看一个简单的函数重载例子:
    [C++] syntaxhighlighter_viewsource syntaxhighlighter_copycode
    #include <iostream>
    using namespace std;
    int abs(int a)
    {
    	return a> 0 ? a : -a;
    
    }
    double iabs(double a)
    {
    	return a > 0 ? a : -a;
    
    }
    int main()
    {
    
    	cout << abs(-1) << endl;
    	cout << abs(-1.23) << endl;
    
    	return 0;
    }
    

    c++对c语言的扩展-函数重载

    c++对c语言的扩展-函数重载


    重载规则:
    1,函数名相同。
    2,参数个数不同,参数的类型不同,参数顺序不同,均可构成重载。
    3,返回值类型不同则不可以构成重载。

    如下:
    [C++] syntaxhighlighter_viewsource syntaxhighlighter_copycode
    void func(int a); //ok
    void func(char a); //ok
    void func(char a,int b); //ok
    void func(int a, char b); //ok
    char func(int a); //与第一个函数有冲突

    有的函数虽然有返回值类型,但不与参数表达式运算,而作一条单独的语句。
    匹配原则:
    1,严格匹配,找到则调用。
    2,通过隐式转换寻求一个匹配,找到则调用。

    通过下面的例子可以理解重载的匹配原则
    [C++] syntaxhighlighter_viewsource syntaxhighlighter_copycode
    #include <iostream>
    using namespace std;
    void print(double a)
    {
    	cout << a <<endl;
    }
    void print(int a)
    {
    	cout << a << endl;
    
    }
    int main()
    {
    	print(1);//匹配print(int)
    	print(1.1);//匹配print(double)
    	print('a');//匹配print(int)
    	print(1.11f);//匹配print(double)
    
    	return 0;
    }

    c++对c语言的扩展-函数重载

    c++对c语言的扩展-函数重载

    另外,C++ 允许,int 到 long 和 double,double 到 int 和 float 隐式类型转换。遇到这种情型,则会引起二义性,明确参数的类型即可(可以通过强制转换等一些方式)。


    不积跬步,无以至千里
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    手机版|Archiver|小黑屋|sitemap|编程论坛 - 一个单纯的编程学习交流论坛 ( 豫ICP备15032706号 )

    GMT+8, 2018-6-19 16:30 , Processed in 0.109375 second(s), 39 queries .

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表