Member 14726049 Ответов: 2

Передача значений в другую функцию класса дает сумасшедшие значения при печати


Я пытаюсь использовать int number_of_groups return и передать его в функцию djecja_reduta это заголовочный файл, а затем распечатать его для первого karneval number_of_groups() выдает нормальные значения, но void djecja_reduta::number_of_groups() дает очень сумасшедшие результаты и случайные числа

Пример: я ввожу number_home_groups = 200 и number_foreign_groups = 300 при первом вызове он дает мне сумму 500, но после вызова djecja_reduta::number_of_groups() он дает мне 425232 выглядит как адрес для меня


class karneval { 
private:
    char name_carneval[30];
    int number_home_groups;
    int number_foreign_groups;
    int sum;
public:karneval() {
        int number_home_group(0);
        int number_foreign_groups(0);
        int sum(0);
        strcpy(name_carneval,"");
    }
    void input();
    int number_of_groups();
};
void karneval :: input() {
    cout << "Input number home groups" << endl; 
    cin >> number_home_groups;
    cout << "input number_foreign_groups" << endl;
    cin >> number_foreign_groups;
}
int karneval:: number_of_groups() {
    sum = number_home_groupa + number_foreign_groups;
    cout << "Suma je:" << sum << endl;
    return sum;
}
class djecja_reduta:public karneval {
private:
    char mjesto_odrzavanja[30];
    int datum_odrzavanja;
public:
    void  number_of_groups();
};
void djecja_reduta:: number_of_groups(){
    karneval karneval;
    karneval.number_of_groups();
}

Это основной файл
int n;
    cout << "Inesert number of carnevals" << endl; 
    cin >> n; 
    karneval* a = new karneval[n];
    djecja_reduta* b = new djecja_reduta[n];
    for (int i = 0; i < n; i++) { 
        cout << i + 1 << ".karneval" << endl;
        a[i].input();

    }
    for (int i = 0; i < n; i++) {
        a[i].number_of_groups();
        b[i].number_of_groups();
    }

Выход:
Suma je:500
Сума Йе:4211069

Что я уже пробовал:

Попробовал использовать void и int для вызова функции

2 Ответов

Рейтинг:
2

Patrice T

Цитата:
Передача значений в другую функцию класса дает сумасшедшие значения при печати

Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что должен делать ваш код, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]

1.11 — отладка программы (пошаговое выполнение и останова) | выучить C++[^]

Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.


Рейтинг:
1

Richard MacCutchan

void djecja_reduta:: number_of_groups(){
    karneval karneval;
    karneval.number_of_groups();
}

Этот метод создает новый объект karneval, а затем пытается вывести общее количество групп, которые он содержит. Но этот объект не содержит никаких значений для number_home_groups или number_foreign_groups Таким образом, полученная сумма-это просто случайное число.

Пройдитесь по коду с помощью отладчика, и вы увидите его в действии.


Member 14726049

Теперь sum is out 0 как передать эти значения number_home_groups или number_foreign_groups теперь в эту djecja_reduta:: number_of_groups

class karneval {
private:
    char name_carneval[30];
    int number_home_groups;
    int number_foreign_groups;
    int sum;
public:
    karneval() : number_home_groups(0),
                 number_foreign_groups(0),
                 sum(0)
    {
        strcpy(name_carneval, "");
    }

    void input();
    void number_of_groups();
};

Richard MacCutchan

Но это не изменит основной проблемы. Вы не можете получить действительный результат из локальной переменной, которая не получает никаких данных. А класс djecja_reduta на самом деле не служит никакой цели.
Однако в качестве теста вы можете изменить свой код следующим образом:

void djecja_reduta::number_of_groups(){
    karneval::number_of_groups();  // call the base method
}

В основном методе вам нужно собрать входные значения для массива b:
for (int  i=0; i < n; i++)
{
    cout << i + 1 << ".karneval" << endl;
    a[i].input();
    cout << i + 1 << ".djecja_reduta" << endl;
    b[i].input();
}