函数重载 C++(一)
来源:互联网 发布:云计算大数据视频教程 编辑:程序博客网 时间:2024/05/29 01:52
C++ 函数重载
转载:
http://blog.csdn.net/xiejingfa/article/details/48496593作者:谢景发
www.cnblogs.com/skynet/archive/2010/09/05/1818636.html 作者:吴秦
函数重载
函数重载的定义是:在相同的作用域中,如果函数具有相同名字而仅仅是形参表不同,此时成为函数重载。注意函数重载不能基于不同的返回值类型进行重载。
注意函数重载中的“形参表”不同,是指本质不同,不要被一些表象迷惑。main函数不能被重载。
下面三组定义本质是相同的,不是重载:
1)int sum (int &a);和 int sum (int &);
2) int sum (int a) 和 int sum (const int a);
3)typedef int DD;
int sum(int a); 和 int sum (DD a);
其中第二个例子对于非引用传参,形参是否const是等价的。但是当使用引用传参时,有无const是不同的。使用指针传参时,指向const对象的指针和指向非const对象的指针做形参的函数是不同的。
*下面谈论一个比较恶心的问题,基于const的重载。
在类中会有这样一种重载,它是合法的。
Class A {
int function ();
int function () const;
};
可以看到在A类中,function函数是发生重载了,而且是合法的。而且在调用时,只用A类的const对象才能调用const版本的function函数,而非const对象可以调用任意一种,通常非const对象调用不是const版本的function函数。
原因是:按照函数重载的定义,函数名相同而形参表有本质不同的函数称为重载。在类中,由于隐含的this形参的存在,const版本的 function函数使得作为形参的this指针的类型变为指向const对象的指针,而非const版本的使得作为形参的this指针就是正常版本的指针。此处是发生重载的本质。重载函数在最佳匹配过程中,对于const对象调用的就选取const版本的成员函数,而普通的对象调用就选取非const版本的成员函数。
(注:this指针是一个const指针,地址不能改,但能改变其指向的对象或者变量)
重载函数条件
参数类型或参数个数不同。
返回值不同不能视为重载。
是否为常函数不能视为重载
对于普通类型参数只有const、volatile区别不能视为重载,但是如果参数是指针或 引用类型,那么const、volatile的区别视为重载。
函数重载(overload)
函数重载是指在一个类中声明多个名称相同但参数列表不同的函数,这些的参数可能个数或顺序,类型不同,但是不能靠返回类型来判断。特征是:
(1)相同的范围(在同一个作用域中);
(2)函数名字相同;
(3)参数不同;
(4)virtual关键字可有可无(注:函数重载与有无virtual修饰无关);
(5)返回值可以不同;
如不同类型的swap函数,即为函数重载。
函数重写(也称为覆盖 override)
函数重写是指子类重新定义基类的虚函数。特征是:
(1)不在同一个作用域(分别位于派生类与基类);
(2)函数名字相同;
(3)参数相同;
(4)基类函数必须有 virtual关键字,不能有 static。
(5)返回值相同,否则报错;
(6)重写函数的访问修饰符可以不同;
重定义(也称隐藏)
(1)不在同一个作用域(分别位于派生类与基类);
(2)函数名字相同;
(3)返回值可以不同;
(4)参数不同。此时,不论有无 virtual关键字,基类的函数将被隐藏(注意别与重载以及覆盖混淆);
(5)参数相同,但是基类函数没有 virtual关键字。此时,基类的函数被隐藏(注意别与覆盖混淆);
- 函数重载 C++(一)
- 编写一函数add()函数重载,函数模板(C++)
- C++: 运算符重载(一)、友元函数、链式编程支持
- c++(一) 类 对象 重载 继承 多态 构造函数 虚函数 覆盖 纯虚函数等
- c++之重载函数(一)
- c++STL(一)重载与模板。
- C++(6)/运算符重载(一)
- C/C++ 函数重载
- [c++]函数重载
- C++:函数重载
- Objective-C函数重载
- c++-函数重载
- C++-函数重载
- C++_函数重载
- 【C++】函数的重载
- 【C++】:C++函数重载
- [C++]函数重载
- C/C++函数重载
- 编程语言 标记语言 脚本语言分别有哪些? 区别是什么?
- 短进程优先的调度算法详解
- SpringBoot 自动生成API文档
- Linux搭建spark集群
- linux下task_struct部分解析
- 函数重载 C++(一)
- Java连接SQLite、MySQL、Sql Server数据库汇总
- 返回指针的函数&&指向函数的指针
- 【UML】总结-九种图
- SXOI2017游记
- 中国人工智能迎来世界级良机
- 基本数据类型
- PHP判断参数是否上传
- Caffe 安装优化版 (CPU anaconda) 附Makefile.config