C++:Overload
重载
函数签名是指函数的参数个数,参数类型以及参数的顺序。重载的定义是:在同一作用域内函数签名不同但函数名相同的函数互为重载。
// 以下几个函数互为重载
void print();
void print(int a);
void print(double a, int b);
void print(int a, double b);
void print(string a, double b);
参数的不同也可以是通过const
区分的。
// 以下两个函数同样形成函数重载
void print(int &a);
void print(const int &a);
// 声明成员函数为const即指定this指针为const,同样可以构成重载
class LiF {
public:
void print();
void print() const;
};
函数的形参名不同或返回值类型不同并不构成重载,并且编译报错,因为这类函数被编译器识别为相同函数。
// 重定义print,编译报错
void print(int a);
void print(int b);
// 重定义print,编译报错
void print(int a);
int print(int a);
重载是如何实现的
在C++的编译期,编译器会根据参数列表对函数进行重命名,在函数名中按顺序加入参数类型以区分重载的函数。在函数调用时,则会根据实参类型逐个匹配重载的函数,失配则报错。也就是说,重载只是语法上的重载,重载的函数在编译后仍然是不同的函数。这也就解释了为什么只有函数签名不同的函数才能构成重载。在编译完成之后,函数的重载也就确定了。因此可以说,重载提供的多态性是静态的,或者说重载提供了编译期的多态性。
C++:Overload的更多相关文章
- Delphi 方法:overload、override、virtual、dynamic、abstract
1.overload 在Pascal语法规则中,同一个UNIT里是不能存在两个同名的函数的,例如: function func(): Boolean; function func(const x: C ...
- 面试问题之C++语言:Overload、Override及Overwirte的区别
Overload(重载):在C++程序中,可以将语义.功能相似的几个函数用同一个名字表示,但参数或返回值不同(包括类型.顺序不同),即函数重载. 特点: (1)相同的范围(在同一个类中) (2)函数名 ...
- 转:Delphi的类与继承(VB与delphi比较)
既然已经做出了com程序用delphi来开发的决定,那当然就要对delphi进行一些深入的了解.有人说delphi是一个用控件堆砌起来的工具,和vb没什么两样:也有人说dephi实际上是面向过程的,他 ...
- overload, override和overwrite之间的区别
Overload.Overwrite和Override的概念比较容易混淆,而且Overwrite和Override的中文翻译五花八门,让人很Confuse,顾保持英文原意: Overload 重载 ...
- C++中的Overload、Override和Overwrite
在C++语言中有一组基础的概念一直都容易混淆:Overload.Override和Overwrite分别表示什么意思?下面把这三个概念整理一下: 1. Overload(重载) 重载的概念最好理解,在 ...
- 大约 C++ 几个方面分析--overload, override, overwrite, rewrite
overload, override, overwrite, rewrite 这几个单词常常出如今 C++ 书中,翻阅一些译版后发现并未对 override, overwrite, rewrite 严 ...
- Overload和Override的区别 C++ Java
Overload:顾名思义,就是Over(重新)——load(加载),所以中文名称是重载. 它可以表现类的多态性,可以是函数里面可以有相同的函数名但是参数名.返回值.类型不能相同: 或者说可以改变参数 ...
- Override和Overload的含义去区别
java中的继承,方法覆盖(重写)override与方法的重载overload的区别 方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现. 重写(Ove ...
- Override和Overload差别,Overloaded的方法能否够改变返回值的类型?
Overload是重载的意思, Override是覆盖的意思,也就是重写. 重载Overload表示同一个类中能够有多个名称同样的方法,但这些方法的參数列表各不同样(即參数个数或类型不同). 重写Ov ...
随机推荐
- 第一章 1.18 re模块
方法使用 1. compile(正则表达式) - 编译创建正则表达式对象 re_obj = re.compile(r'\d{3}') re_obj.fullmatch('234') re.fullma ...
- 【CF933E】A Preponderant Reunion(动态规划)
[CF933E]A Preponderant Reunion(动态规划) 题面 CF 洛谷 题解 直接做很不好搞,我们把条件放宽,我们每次可以选择两个相邻的非零数让他们减少任意值,甚至可以减成负数(虽 ...
- PHP面试题2019年阿里巴巴面试题及答案解析
一.单选题(共27题,每题5分) 1.Memcache与Redis的比较错误的是? A.Memcache过期后,不删除缓存,会导致下次取数据数据的问题,Redis有专门线程,清除缓存数据: B.Mem ...
- Element-ui中ElScrollBar组件滚动条的使用
在翻看 element-ui官网的文档时,发现其左侧导航和右边的内容超出屏幕时,滚动条的样式比较小巧,通过浏览器审查工具查看,发现它是使用了el-scrollbar的样式,跟element-ui的组件 ...
- QML调用C++
//Login.h #include <QObject> #include <QDebug> class Login : public QObject { Q_OBJECT p ...
- 从立创EDA,Gratipay看中文编程开发环境和推广运营的一个趋势
前不久听说立创EDA,对比之前的讨论: 适合中文用户的编程语言和IDE, 侧重于现有语言/IDE不具备的特性 · Issue #11 · program-in-chinese/overview,觉得颇 ...
- Saltstack_使用指南10_配置管理-状态模块
1. 主机规划 salt 版本 [root@salt100 ~]# salt --version salt (Oxygen) [root@salt100 ~]# salt-minion --versi ...
- 码云 git 常用命令
git 常用命令: git init 创建一个本地文件 ①git add . 当前文件夹下的所有内容 添加到暂存区 git add test.txt 指定文件夹添加 可以添压缩文件 ②git comm ...
- centos7中python3.6报错ModuleNotFoundError: No module named '_ssl' 或者 Max retries exceeded with url: / (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.",))
如果在运行爬虫时报此错:requests.exceptions.SSLError: HTTPSConnectionPool(host='www.baidu.com', port=443): Max r ...
- emacs 窗口控制
1,调整窗口大小 c-c ^ 窗口变高 c-c } 窗口变宽 c-c { 窗口变窄 2,窗口间移动 ;;这一条语句的作用是让 windmove 在边缘的窗口也能正常运作.举个例子,当前窗口已\\ 经是 ...