Невозможно разделить функцию ввода в классе с функцией с аргументами - PullRequest
1 голос
/ 23 апреля 2019

Невозможно разделить функцию ввода в этой задаче

В этом коде я не могу отделить функцию ввода. Однако, когда я помещаю ввод в int main (), он показывает правильное решение. Что не так с моим кодом?

#include<iostream>
using namespace std;
class test
{
    int a,b;
    public:
    void input();
    void swapValue(int value1, int value2);
};
void test::input()
{
    cin>>a>>b;
}
void test::swapValue(int value1, int value2)
{
    cout << "Swap value in function" << endl;

    int temp = value1;
    value1   = value2;
    value2   = temp;
    cout << "value 1: " << value1 << endl;
    cout << "value 2: " << value2 << endl;
}
int main()
{
    int a,b;
    test s1;
    s1.input();
    cout << "===============================" << endl;
    cout << "After the function call" << endl;
    s1.swapValue(a, b);

    system("pause");
    return 0;
}

Ответы [ 2 ]

1 голос
/ 23 апреля 2019

В этой функции:

void test::input()
{
    int a, b;
    cin >> a >> b;
}

Вы не изменяете поля a и b элементов test.Вы создаете новые переменные a и b, которые отбрасываются в конце функции, оставляя поля-члены неизменными.Удалите строку int a, b;, чтобы исправить это.

Другая проблема заключается в том, что вы не можете читать a и b.swapValue ничего с ними не делает, так почему это даже функция-член?Вы должны передать ссылки на a и b на swapValue, но они являются частными и нет получателя, так что это не работает.Вместо этого я бы порекомендовал что-то вроде этого:

void test::swapValue()
{
    cout << "Swap value in function" << endl;
    int temp = a;
    a = b;
    b = temp;
    cout << "value 1: " << a << endl;
    cout << "value 2: " << b << endl;
}

И назвал бы это так:

s1.swapValue();

Теперь это функция-член, которая меняет поля a и b,и как таковой, он не нуждается ни в каких параметрах.

1 голос
/ 23 апреля 2019
void test::input()
{
    int a,b;   // these are local variables
    cin>>a>>b;
}

Локальные переменные a и b в input, в общем, локальны для функции input, они перестают существовать, как только программа вернулась из функции, несмотря на то, что ониимеют то же имя, что и переменные a и b в main.

Это базовые знания, которые объясняются в первых главах учебника по программированию.

Выпросто нужно удалить эту строку в input:

void test::input()
{
    // delete this line:   int a,b;
    cin >> a >> b;
}

Кстати: цель swapValue мне не совсем понятна, но в основном вы, кажется, путаете членов класса и локальные переменные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...