C++程序设计 函数的重载与重写

假如现有代码如下:

int fun1(int a, int b){return a>b?a:b;}

char& fun1(int a, int b){return a>b?a:b;}

char *c = fun1(1, 2);

cout << c << endl;

以上伪代码是否有误,错误的地方在何处?

命令行输出的是什么?

可否称返回值为char的fun1函数为fun1的重写?

有用望采纳
这份代码存在以下几个错误:

fun1() 函数有重载,一个函数返回int类型,另一个函数返回char&类型,但它们有相同的函数名和参数列表。

当调用 fun1(1, 2) 时,编译器不能解析该函数是返回int类型还是char&类型。

返回char&类型的fun1函数的返回值是一个不合法的引用,因为它返回了一个临时对象。

以下是优化代码:

#include <iostream>
#include <cmath>

int fun1(int a, int b){return a>b?a:b;}

int main()
{
    int c = fun1(1, 2);
    std::cout << c << std::endl;
    return 0;
}

说明:

原代码存在类型不匹配的错误,将 char& 改为 int。
原代码存在试图将返回值地址赋值给指针的错误,将返回值直接赋值给变量 c。
加入头文件 cmath。
使用 std::cout 输出。
输出结果为:2
说明第二个fun1函数没有被使用。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

有多个错误的地方:

  1. 函数名相同,但返回值类型不同,这个肯定是不对的。在C++中,你可以函数重载,但是函数重载的要求是函数的参数列表(即参数的数量、类型和顺序)必须不同
  2. 第二个 fun1 函数返回值是 char 引用,但它被赋给了 char 指针, char 引用不是 char 指针
  3. 你都说了是伪代码,那代码中缺少了 #include 和 using namespace std; 这两个语句就先忽略吧