C和C++区别——函数的重载
来源:互联网 发布:网络剧 植入广告 价格 编辑:程序博客网 时间:2024/06/10 09:55
函数的重载:
C语言:函数产生符号,由函数名称决定的
C++:函数产生符号,由函数名称+形参的类型+形参的个数决定的
下面这样一份代码,在C++中是可以通过编译的
但是在C语言中是不能通过编译的,因为在C语言中这三个函数生成的符号全是compare,重定义了,在C++里面,这三个函数可以看作函数名+形参,即compare_int_int,
compare_double_double, compare_char*_char*,
函数名相同,参数列表不同的一组函数称作一组重载的函数,不能仅通过返回值不同来进行判断,跟返回值没关系。
静多态和动多态区别:
静多态:函数的重载,模板
动多态:继承里面的多态(虚函数)
在编译的时候,编译器会自动根据实参参数的类型来定位相应的函数重载的版本, 如图:
在main函数里面加入一个声明,会报错,如图:
显示从double转为int可能会丢失数据
在C和C++里面,可以定义全局和局部的同名的变量,但是在局部使用的时候,优先使用局部的,(就近原则),先搜索局部的,局部没有再搜索全局的,调用点在局部进行调用,所以,重载必须处于同一作用域之内,!!!
再下面,把double改为float,
显示,对重载函数的调用不明确,
调用重载函数的时候,编译器首先会判断你给的参数,如果你给的实参和调用重载函数的形参类型绝对匹配,则调用相应的重载的版本,
如果不匹配,则会进行相应的默认转换,如果转换成功,则调用相应的函数重载的版本,但是像上面的情况,没有找到和它给的类型绝对匹配的,doule进行类型转换出错了,它既可以转成int,也可以转成float, 但是我们会想,浮点数不是应该优先转成float吗?为什么会同时匹配为int和float?难道是因为 Int和float都占四个字节?那我们一种,
将Int改为short后,结果更加严重,出现了更多匹配失败,如图,
所以呢,这也是我们笔试面试考的最多的部分,即类型转换问题,
我们来看一个运行结果,
打印出来是b,为什么呢?因为a和b在作比较的时候,会把 b 转换成无符号的整型,然后 b 就是一个特别大的数字,所以a > b不成立,则打印b,
改为unsigned short之后,打印 a ,如图:
为什么呢?运算符在进行运算的时候,必须保证运算符左右两端的类型相同,
我们来看看编译器默认类型转换:
向左:无条件转换
向上:强制类型转换,必须要明确要转的类型
提高运算精度,
我们来看这段代码
unsigned int a = 1;
char b = -1;
char c = a > b?'a':'b';
cout<<c<<endl;
char b横向无条件转化成Int,a 现在是无符号的int,所以把b转为a,即把-1转为unsigned int,就是整型的最大值,
unsigned char a = 1;
char b = -1;
char c = a > b?'a':'b';
cout<<c<<endl;
char和unsigned char都要无条件转成int,两个都为Int就可以比较了, 所以1 > -1,即a > b,有符号整数存-1没问题,
所以,在调用的时候,参数改为浮点数就Ok了,如图:
- C和C++区别——函数的重载
- [C++]函数的重载、重写和重定义的区别
- C和C++的区别 04.函数重载
- C语言和C++的区别(函数重载)
- c,c++函数重载的区别
- C/C++知识要点3——类成员函数的重载、覆盖和隐藏的区别
- 【C#】重写和重载的区别
- 【C++】函数的重载
- 【c++】函数的重载
- 【C++】复制构造函数(拷贝构造函数)和=运算符重载使用的区别
- C——函数指针和指针函数的区别
- 【C++】重载运算符和重载函数
- c/c++-虚函数和重载
- C/C++—— C++中函数重写和函数重载
- C语言——系统函数和库函数的区别
- C语言——系统函数和库函数的区别
- C语言——系统函数和库函数的区别
- C和C++区别——带有默认值的函数
- 使用@ExceptionHandler实现全局异常处理器
- Android Support Library的前世今生
- C语言指针进阶(1)
- python的入门学习
- Noip 2013 转圈游戏
- C和C++区别——函数的重载
- leetcode.array--75. Sort Colors
- codeforces C—Short Program 与或异或运算
- C++程序编译执行具体步骤及各大系统中的编译命令
- 猴子也能看得懂的 git 教程
- linux系统下使用gcc/g++编译生成动态库
- 澳大利亚贸易委员会代表团到访FLYPRO,XEagle进军澳洲
- 【入门篇】Activiti查询指定流程定义下指定流程实例下历史任务
- LeetCode刷题(25)