📜  C++中的函数重载和返回类型

📅  最后修改于: 2022-05-13 01:55:44.736000             🧑  作者: Mango

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