c++整理--函数重载
一、为什么C语言不支持函数重载而c++能支持
什么是函数重载?为什么C语言不支持函数重载,而c++能支持函数重载?
解析:
函数重载是用来描述同名函数具有相同或者相似的功能,但数据类型或者是参数不同的函数管理操作。在C语言里需要写两个不同名称的函数来进行区分。
#include <iostream> using namespace std; class Test { public: int add(int x, int y) //相加,传入参数以及返回值都是int { return x+y; } float add(float x, float y) //相加,传入参数以及返回值都是float { return x+y; } }; int add(int x, int y) //相加,传入参数以及返回值都是int { return x+y; } float add(float x, float y) //相加,传入参数以及返回值都是float { return x+y; } int main() { int i = add(1, 2); float f = add(1.1f, 2.2f); Test test; int i1 = test.add(3, 4); float f1 = test.add(3.3f, 4.4f); cout<<"i = "<<i<<endl; cout<<"f = "<<f<<endl; cout<<"i1 = "<<i1<<endl; cout<<"f1 = "<<f1<<endl; return 0; }
上面的程序中使用了全局函数和类成员函数的重载,代码30~39行是对它们的调用与测试。可以看到,在c++中可以根据传入参数类型和返回类型来区分不同的重载函数。
C语言不支持函数重载,c++却支持,为什么呢?这是因为c++的重载函数经过编译器处理之后,两个函数的符号是不相同的。例如代码第18行的add函数,经过处理后变成了_int_add_int_int之类,而后者变成了_float_add_float_float之类。这样的名字包含了函数名、函数参数数量及返回类型信息,c++就是靠这种机制来实现函数重载的。
总结:
函数重载是用来描述同名函数具有相同或者相似的功能,但数据类型或者是参数不同的函数管理操作。
函数名经过c++编译器处理后包含了原函数名、函数参数数量及返回类型信息,而C语言不会对函数进行处理。
(A) int calc(int, int); int cale(const int, const int); (B) int get(); double get(); (C) int *reset(int*); double *reset(double*); (D) extern "C" int compute(int *, int); extern "C" double compute(double*, double);
A错误。第二个函数被视为重复声明,第二个声明中的const修饰词会被忽略。
B错误。第二个声明是错误的,因为单就函数的返回值而言,不足以区分两个函数的重载。
C正确。这是合法的声明,reset()函数被重载。
D错误。第二个函数声明是错误的,因为在一组重载函数中,只能有一个函数被指定为extern "C"
三、重载和覆写有什么区别
重载是指子类改写了父类的方法,覆写是指同一个函数的不同版本之间参数不同。
重载是编写一个与已有函数同名但是参数表不同(参数数量或参数类型不同)的方法,它具有如下特征:
(1)方法名必须相同。
(2)参数列表必须不相同,与参数列表的顺序无关。
(3)返回值类型可以不相同。
覆写是派生类重写基类的虚函数,它具有如下如示的特征。
(1)只有虚函数的抽象方法才能被覆写。
(2)相同的函数名
(3)相同的参数列表
(4)相同的返回值类型
重载是一种语法规则,有编译器在编译阶段完成,不属于面向对象编程;而覆写是由运行阶段决定的,是面向对象编程的重要特征。
c++整理--函数重载相关推荐
- meo学习笔记2:函数重载(C++)
关于C++中的函数重载问题 1.前言 重载其实在是一个很基础的概念,我们用的时候也很多,但是我老是忘记相关的约定约束,下面就自己学习的相关问题做一个整理吧,主要说明函数重载的含义.函数重载的形式等问题 ...
- C++基础知识 —— 内存分区模型、引用、函数重载、类和继承、this指针、友元、多态、文件操作
参考 黑马程序员 C++课程笔记,个人理解及整理 可以使用 在线编译c++代码 来简单验证.学习代码 目录 C++核心编程 1. 内存分区模型 1.1 程序运行前 1.2 程序运行后 1.3 ...
- ActionScript语言函数重载
更新:你见过JavaScript支持重载吗,规范就是这么定义的.如果不是研究Java和Flex对象的Serialization,我也不会注意它. 距离写这篇文章已有8年了,时光匆匆啊,今天整理资料时看 ...
- 坚持学习100天:多态(函数重载、虚函数和多态)
前言 Hello,我是修齊. 学习C++的第一百零一十天,将近五一假期了,不浪漫亦是罪名,男生今年不能再挨批斗了,放假就得好好陪陪身边的人浪漫浪漫,生活,加油,学习加油. 在这里记录一些学习的东西和学 ...
- C++ 笔记(13)— 函数(函数声明、函数定义、函数调用[传值、指针、引用]、函数参数默认值、函数重载)
每个 C++ 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数. 1. 函数声明 函数声明告诉编译器函数的名称.返回类型和参数.函数声明包括以下几个部分: ret ...
- 函数重载需要注意的点
基本概念: 作用:函数名可以相同,提高复用性 函数重载满足的条件: 1.同一作用域 2.函数名相同 3.函数参数类型不同,个数不同,顺序不同 基本规则就上面那几条,不多说了,开始难一些的东西: 1.函 ...
- JavaScript中实现函数重载和参数默认值
2019独角兽企业重金招聘Python工程师标准>>> 参数默认值是指在调用函数时,若省略了某个实参,函数会自动为该参数分配一个默认值,使得函数调用的方便性和灵活性大大提高. 举个例 ...
- 《C++成员函数重载、覆盖与隐藏》
<成员函数的重载.覆盖与隐藏> ------------------------------------------------------------------------------ ...
- 函数重载(overload)
函数重载(overload) 先看一个例子 #include<iostream> using namespace std; //计算两个参数a,b的乘积的函数 int multiply(i ...
最新文章
- 【Go语言】【12】GO语言的结构体
- 使用git提交到github,每次都要输入用户名和密码的解决方法
- (1)Hadoop 的第一个程序 WordCount 理解
- Java Date Time 教程-时间测量
- VC中对CString 的读写(ini文件)
- ios 扫码枪外设 键盘模式_多平台连接:雷柏XK100蓝牙键盘评测
- MindManager中读图工具的使用
- 【2019南昌邀请赛网络赛I:】Max Answer(st表+单调栈(新模版)+分析)
- FX5 C的编程语言,三菱FX5-C32EX/D手册FX5-C32EX/D编程手册 - 广州凌控
- 怎么利用计算机求一元三次方程,一元三次方程怎么快速把解求出来?
- python保存快捷键是什么_python中的快捷键
- Java每日算法--罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
- PS软件学习知识盘点
- MacBook Pro win7系统下使用 苹果鼠标 apple mouse
- 自媒体:公众号内容可以同步到头条吗
- html扇形展开,css如何画扇形?
- ITN网络课程笔记(十七)(完)
- CPU是计算机的大脑英语,走进PC的大脑:CPU知识全面剖析
- 蓝桥杯官网python组基础练习-基础1-5
- Matplotlib进阶教程:颜色讲解
热门文章
- 免费SSL证书(支持1.0、1.1、1.2)
- Why does pthread_cond_signal not work?【转】
- [原创]windows server 2012 AD架构试验系列 – 12 配置操作主机
- XenDesktop 5 SQL Server Mirror事务日志比较大的原因分析
- NFS无法启动根文件系统的解决
- Windows 任务栏缩略图自定义程序[更新 Build20100830]
- 服务器内存延迟,内存带宽、延迟性能测试
- android暂停活动,如何将Android暂停活动带到前面
- gitlab修改用户密码_CRM用户模块(用户密码修改)
- 清华大学《操作系统》(二十三):I/O子系统