c++14 - 显示垃圾值
问题描述
当使用友好函数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();
}
解决方案
问题是您打印sum
但您从未初始化sum
ofobj1
和obj2
。
您sum
仅在内部进行初始化,add()
但将值传递给add()
by copy,因此您sum
仅在临时对象中进行初始化。
当您打印obj1.sum
和obj2.sum
(通过display()
)时,该sum
成员仍未初始化。
所以垃圾。
尝试通过引用传递对象
// ..........V........V
void add (DM & p1, DB & p2)
这样sum
内部的初始化add()
对调用对象也有影响。
推荐阅读
- ios - 如何为按钮着色,然后当您点击它时它不会改变颜色?
- python - 怀疑 tf/keras 网络的功能
- python - SimpleITK 读取图像切片
- css - 动画 css slideInDown
- javascript - 如何在 Node js 中使用 Hmac 创建令牌
- python - 如何提取在 Python 中使用 PKWARE SecureZip 压缩的受密码保护的 zip 文件?(视窗 10)
- ruby - Ruby Selenium Webdriver:在 Mac Chrome 上关闭文件对话框
- firebase - Flutter Firestore 获取值的总和
- airflow - 尝试在 Airflow 上使用 SendGrid 时出现错误 400(Google Composer)
- c++ - 无法编译 TRAP 库:'operator!=' 不匹配(操作数类型为 'std::basic_istream
' 和 'long int')