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

値と参照は同じ型であるため、オーバーロードできません。パラメータを変更する関数と新しい値を返す関数の 2 つの関数が必要な場合は、別の名前または別の型を指定する必要があります (たとえば、後者の関数がポインタ型を使用するようにします)。

于 2012-12-13T21:12:13.190 に答える
0

引数としてアドレスを取るオーバーロードを指定してみてください:

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

    return *a -5;
}
于 2012-12-13T20:30:36.137 に答える
0

1 つの関数をアドレス渡しとして宣言し、もう 1 つの関数を値または参照で宣言します。

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