C++函数重载

函数重载是指在同一作用域类,可以有一组相同的函数名,不同参数列表的函数,这种函数被称为重载函数,重载函数通常用来命名一组具有相似功能的函数,可以减少函数名的数量,避免空间被污染。

#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 *)


原文地址:https://www.cnblogs.com/gaot/p/7709698.html