C++函数重载
2016-07-01 10:43
387 查看
函数重载是指在同一作用域类,可以有一组相同的函数名,不同参数列表的函数,这种函数被称为重载函数,重载函数通常用来命名一组具有相似功能的函数,可以减少函数名的数量,避免空间被污染。
不用重载,同样功能却需要声明的函数。
函数重载需要注意的几点:
(1)重载函数需要参数的数目类型不同,或者排列顺序不同。而与函数名称是否相同以及返回值是否相同无关
例如
int sum(float a,int b){return a+b;}
int sum(int a,float b){return a+b;}//true,参数的顺序不一样
int sum(float a,int b,int c){return a+b+c;}//true,因为参数的个数不一样
int sum(float m,int n){return m+n};//false,参数名不同不属于重载
(2)重载出现二义性时C++会拒绝函数调用
当出现二义性的时候C++就会拒绝函数调用
(3)类型引用和类型不能作为函数调用
(4)使用const变量修饰的变量不能赋值给const,而非const变量可以赋值给const变量
#include <iostream> using namespace std; void Print(int a) { cout<<a<<endl; } void Print(string str) { cout<<str<<endl; } int main() { Print(123); Print("Hello World"); return 0; }重载能够是一个函数能够应对不同的参数,完成同样的功能。如果没有重载机制,那么对于不同的数据进行相同的操作,也需要定义名称完全不同的操作。
int int_add(int a,int b); float float_add(float a,float b);
不用重载,同样功能却需要声明的函数。
函数重载需要注意的几点:
(1)重载函数需要参数的数目类型不同,或者排列顺序不同。而与函数名称是否相同以及返回值是否相同无关
例如
int sum(float a,int b){return a+b;}
int sum(int a,float b){return a+b;}//true,参数的顺序不一样
int sum(float a,int b,int c){return a+b+c;}//true,因为参数的个数不一样
int sum(float m,int n){return m+n};//false,参数名不同不属于重载
(2)重载出现二义性时C++会拒绝函数调用
void print(const char * str,int width);//#1 void print(double d,int width);//#2 void print(long l,int width);//#3 void print(int i,int width);//#4 void print(const char * str);//#5 print("Pancakes",15);//use #1 print("Syrup");//use #5 print(1990.0,10);//use #2 print(1999,12);//use #4 print(1999L,15);//use #3
当出现二义性的时候C++就会拒绝函数调用
unsigned int year=3210; print(year,6);// ambiguous call 非法调用print调用的时候不知道与哪一个函数原型匹配。因为上面有三个函数原型都将数字作为第一个参数,因此C++会拒绝这种函数调用
(3)类型引用和类型不能作为函数调用
double cube(double x); double cube(double &x);当调用函数时,如double m=cube(x),编译器并不能判断需要调用哪一个函数。
(4)使用const变量修饰的变量不能赋值给const,而非const变量可以赋值给const变量
void dribble(char * bits); void dribble(const char * cbits); void dabble(char *bits); void drivel(const char * bits); const char p1[20]="Hello World"; char p2[20]="It's a good day"; dribble(p1); //dribble(const char) dribble(p2); //dribble(char) dabble(p1);//no match dabble(p2);//dabble(char *) drivel(p1);//drivel(const char *) drivel(p2);//drivel(const char *)
相关文章推荐
- C++函数重载
- C++转换构造函数和类型转换函数
- 交换+输出最大值+输出二进制1的个数
- C++18、STL——map
- C++程序设计语言练习11.4 算术运算符重载的友元写法
- 设计模式C++实现(1)——工厂模式
- C++ sizeof和typedef关键字
- C++类的静态成员
- 【win32】滚动条 初探
- Item 01: View C++ as a federation of languages
- C++析构函数为什么要为虚函数
- C++ 字符串转换为浮点数时的精度问题
- 【win32】GetDlgItem(函数详解)
- C语言编写的简单计算器程序
- 【win32】 DialogBox(参数)
- C++ 类的多态一(virtual关键字--构造函数深刻理解)
- Qt/C++ 添加pri文件
- 23种设计模式全解析
- c语言指针的初始化和赋值
- c++中resize这个函数怎么用