2

如何使以下重载工作

#include <iostream>

using namespace std;

int subtractFive (int a)
{
    a = a - 5;

    return a;
}

int subtractFive (int &a)
{
    a = a -5;

    return a -5;
}

int main()
{
    int A = 10;

    cout << "Answer: " << subtractFive(*A) << endl;
    cout << "A Value "<< A << endl;

    cout << "Answer: " << subtractFive(A) << endl;
    cout << "A Value "<< A << endl;

    return 0;
}

试过但没有编译

    #include <iostream>

using namespace std;

int subtractFive (int a)
{
    a = a - 5;

    return a;
}

void subtractFive (int* a)
{
    *a = *a -5;
}

int main()
{
    int A = 10;

    cout << "Answer: " << subtractFive(A) << endl;
    cout << "A Value "<< A << endl;

    subtractFive(A);
    cout << "A Value "<< A << endl;

    return 0;
}
4

3 回答 3

0

值和引用具有相同的类型,因此您不能对其进行重载。如果您想要两个函数,其中一个修改其参数,另一个返回新值,那么您必须给它们不同的名称或不同的类型(例如,使后一个函数使用指针类型)。

于 2012-12-13T21:12:13.190 回答
0

将一个函数声明为按地址传递,另一个按值或引用传递:

void subtractByFive(int * p_value)
{
    if (p_value != NULL)
    {
       *p_value -= 5;
    }
    return;
}
于 2012-12-13T20:33:11.827 回答
0

您可以尝试指定一个将地址作为参数的重载:

int subtractFive (int *a)
{
    *a = *a -5;

    return *a -5;
}
于 2012-12-13T20:30:36.137 回答