首页 > 解决方案 > 显示垃圾值

问题描述

当使用友好函数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();
}

标签: c++14c++17

解决方案


问题是您打印sum但您从未初始化sumofobj1obj2

sum仅在内部进行初始化,add()但将值传递给add() by copy,因此您sum仅在临时对象中进行初始化。

当您打印obj1.sumobj2.sum(通过display())时,该sum成员仍未初始化。

所以垃圾。

尝试通过引用传递对象

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

这样sum内部的初始化add()对调用对象也有影响。


推荐阅读