函数重载

作者:jicanmeng

时间:2014年11月27日


在C++中,函数重载指的是多个同名的函数共同存在,但各个函数的参数个数或参数类型不同。

示例程序如下:

#include <iostream>

int bigger(int a, int b)
{
    std::cout << "bigger(int a, int b) called" << std::endl;
    return a >= b ? a : b;
}

char bigger(char a, char b)
{
    std::cout << "bigger(char a, char b) called" << std::endl;
    return a>= b ? a : b;
}

void print(int a)
{
    std::cout << "print(int a) called" << std::endl;
}

void print(int a, int b)
{
    std::cout << "print(int a, int b) called" << std::endl;
}

int main()
{
    int a = bigger(3,4);
    char b = bigger('x','z');

    print(3);
    print(3,4);

    return 0;
}

程序运行结果如下:

[jicanmeng@andy tmp]$ g++ functionOverload.cpp
				[jicanmeng@andy tmp]$ ./a.out
				bigger(int a, int b) called
				bigger(char a, char b) called
				print(int a) called
				print(int a, int b) called
				[jicanmeng@andy tmp]$

程序调用重载的函数时,会根据实参的类型自动寻找到对应的函数。

需要说明两点:

  1. 重载函数必须具有不同的参数个数或者不同的参数类型,只有返回值的类型不同是不行的。例如void fun(int a, int b); int fun(int a, int b);就是错误的。当程序调用fun(3,4)函数时,编译器无法确定调用哪一个函数。
  2. 当某个重载的函数带有默认参数时,应该注意不要和其它的重载函数冲突。例如int func(int a, int b=0); int func(int a);就是错误的。 和上面一样,当程序调用fun(5)函数时,编译器无法确定调用哪一个函数。

参考资料

  1. <<C++实用教程>> 电子工业出版社 郑阿奇 主编 丁有和 编著 P97
  2. The C++ Tutorial:
    http://www.learncpp.com/cpp-tutorial/76-function-overloading/