C++中的函数重载和返回类型
函数重载在 C++ 和Java中是可能的,但前提是函数必须在参数列表中的类型和参数数量上有所不同。但是,如果函数仅在返回类型上有所不同,则不能重载。
为什么函数重载不能使用不同的返回类型?
函数重载属于编译时多态性。在编译期间,会检查函数签名。因此,如果签名不同,函数可以重载。函数函数没有影响,因此不同返回类型的相同函数签名不会被重载。
示例:如果有两个函数: int sum()和float sum() ,这两个将产生编译时错误,因为这里不可能进行函数重载。
让我们通过以下 C++ 和Java程序进一步理解这一点:
C++程序:
CPP
// CPP Program to demonstrate that function overloading
// fails if only return types are different
#include
int fun() { return 10; }
char fun() { return 'a'; }
// compiler error as it is a new declaration of fun()
// Driver Code
int main()
{
char x = fun();
getchar();
return 0;
}
Java
// Java Program to demonstrate that function overloading
// fails if only return types are different
// filename Main.java
public
class Main {
public
int foo() { return 10; }
public
char foo() { return 'a'; }
// compiler error as it is a new declaration of fun()
public
static void main(String args[]) {}
}
输出
prog.cpp: In function ‘char fun()’:
prog.cpp:6:10: error: ambiguating new declaration of ‘char fun()’
char fun() { return 'a'; }
^
prog.cpp:4:5: note: old declaration ‘int fun()’
int fun() { return 10; }
^
Java程序:
Java
// Java Program to demonstrate that function overloading
// fails if only return types are different
// filename Main.java
public
class Main {
public
int foo() { return 10; }
public
char foo() { return 'a'; }
// compiler error as it is a new declaration of fun()
public
static void main(String args[]) {}
}
输出
prog.java:10: error: method foo() is already defined in class Main
char foo() { return 'a'; }
^
1 error