Отображение значения мусора - PullRequest
0 голосов
/ 17 июня 2019

Когда дружественная функция add используется для вывода значения переменной sum двух классов, выводится правильный вывод.Но когда затем используются функции отображения их соответствующего класса, мусорным значением является печать.Что не так с кодом?

#include <iostream>

using namespace std;

class DB;

class DM {
    int m, cm;
    float sum;

public:
    void read()
    {
        cout << "Enter meters and centimeters respectively\n";
        cin >> m >> cm;
    }
    void display(void)
    {
        cout << sum << " meters\n";
    }
    friend void add(DM p1, DB p2);
};

class DB {
    int feet, inch;
    float sum;

public:
    void read()
    {
        cout << "Enter feets and inches respectively\n";
        cin >> feet >> inch;
    }
    void display(void)
    {
        cout << sum << " feets\n";
    }
    friend void add(DM p1, DB p2);
};

void add(DM p1, DB p2)
{
    float a = p2.feet * 12;
    float b = a + p2.inch;
    float c = b * .3048 + p1.m + p1.cm * .01;
    //cout << c << endl;
    p1.sum = c;
    //cout << p1.sum << endl;
    //p2.sum = (c/12)/.3048;
    cout << p2.sum << endl;
}

int main()
{
    DM obj1;
    DB obj2;
    obj1.read();
    obj2.read();
    add(obj1, obj2);
    obj1.display();
    obj2.display();
}

1 Ответ

0 голосов
/ 17 июня 2019

Проблема в том, что вы печатаете sum, но вы никогда не инициализируете sum из obj1 и obj2.

Вы инициализируете sum только внутри add(), но передаете значения вadd() от копия , поэтому вы инициализируете sum только во временных объектах.

При печати obj1.sum и obj2.sum (через display()), элемент sum все еще не инициализирован.

Итак, мусор.

Попробуйте передать объекты по ссылке

// ..........V........V
void add (DM & p1, DB & p2)

Таким образом, инициализация sum inside add() действует также для вызова объектов.

...