为什么垃圾价值在帐户余额之后到来
Why the garbage values is coming after account balance
当我执行此功能时,垃圾值将带有帐户余额信息。谁能帮我为什么?
#include<bits/stdc++.h>
using namespace std;
class Bankaccount
{
public:
int accnumber,accbalance;
int display()
{
cout<<"Account number is: "<<accnumber;
cout<<"nAccount balance is: "<<accbalance;
}
};
int main() {
Bankaccount a;
Bankaccount b;
a.accnumber = 123456;
a.accbalance =50;
b.accnumber = 67890;
b.accbalance = 2000;
cout<<"Account details of Ann"<<a.display()<<endl;
cout<<"nAccount details of Bnn"<<b.display();
return 0;
}
在这种情况下,功能display()
应返回void
。您的版本具有签名,即它返回int
,但是您不会返回任何内容。这导致了不确定的行为。
使用using namespace std
和#include<bits/stdc++.h>
。
在此处阅读为什么要"使用命名空间std;"被认为不良习惯?
以及#include&lt; bits/stdc h&gt;在C ?
中工作#include <iostream>
class Bankaccount
{
public:
int accnumber, accbalance;
void display()
{
std::cout << "Account number is: " << accnumber << "n";
std::cout << "Account balance is: " << accbalance << "n";
}
};
int main()
{
Bankaccount a;
Bankaccount b;
a.accnumber = 123456;
a.accbalance =50;
b.accnumber = 67890;
b.accbalance = 2000;
std::cout<<"Account details of Ann";
a.display(); // this is how to use display
std::cout<<"nAccount details of Bnn";
b.display();
return 0;
}
您正在插入std :: cout等,结果从功能显示返回应该是int,但是考虑到您的函数没有返回声明,一切皆有可能,基本上您将未定义的值发送到Ostream Cout,这就是垃圾的定义。
很可能这是您想要实现的:
https://wandbox.org/permlink/bppth9wuthaiu5jq
#include <bits/stdc++.h>
using namespace std;
class Bankaccount {
public:
int accnumber, accbalance;
std::ostream& display(std::ostream& out) const
{
out << "Account number is: " << accnumber;
return out << "nAccount balance is: " << accbalance;
}
};
std::ostream& operator<<(std::ostream& out, const Bankaccount& acc)
{
return acc.display(out);
}
int main()
{
Bankaccount a;
Bankaccount b;
a.accnumber = 123456;
a.accbalance = 50;
b.accnumber = 67890;
b.accbalance = 2000;
cout << "Account details of An" << a << endl;
cout << "nAccount details of Bn" << b << endl;
return 0;
}
您的int display()
函数不会返回int
,因此调用该功能后您将具有未定义的行为。如果它返回了int
,那该号码已被打印,但我怀疑这不是您想要的。
您看到的垃圾是从堆栈中挑选的int
(因为display()
应该在此处放置int
(。它是由于其他功能的原因,但是现在它已经消失了,所以任何事情都可以发生。为了避免这种情况,您可以声明您的功能void display()
-但是您将无法流式传输,这就是您想做的。
如果您想能够流式传输对象,则需要定义流操作员来完成工作。我已经用OUT流操作员(operator<<
(替换了您的display()
功能:
#include <iostream>
//#include<bits/stdc++.h> // non-portable, don't use it
// using namespace std; // brings in too much in the namespace
using std::cout; // prefer this or just write std::cout everywhere
class Bankaccount {
public:
int accnumber, accbalance;
friend std::ostream& operator<<(std::ostream& os, const Bankaccount& ba) {
return os << "Account number is : " << ba.accnumber
<< "nAccount balance is: " << ba.accbalance << "n";
}
};
int main() {
Bankaccount a;
Bankaccount b;
a.accnumber = 123456;
a.accbalance = 50;
b.accnumber = 67890;
b.accbalance = 2000;
// std::endl is approx. the same as "n" + std::flush. You don't need flushing.
cout << "Account details of Ann" << a << "n";
cout << "nAccount details of Bnn" << b << "n";
}
相关文章:
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 在类定义之后定义一个私有方法
- 在循环C++中指定字符串之后,不会打印该字符串
- C++宏忽略之后的内容
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- strncpy之后的char数组的错误行为
- 计算十进制 c++ 之后的数字
- "x += x--"之后的 x 是什么?
- 类的前向声明之后的类成员函数定义,在类声明之前
- 为什么将双精度转换为 int 似乎在第 16 位数字之后将其四舍五入?
- execlp() 在 fork() 之后无法正常工作
- 我认为我的代码很好,但它在 cin a 之后停止并且没有进一步?
- 如何在MISRA C++之后实施CRTP
- 在 OpenCV 的 namedWindow 之前或之后初始化 Tesseract
- 检测到堆损坏:在正常块 c++ 动态 2D 数组之后
- C++ 如果在 if 为 true 之后运行,为什么还会这样做
- 在 fork() 之后,我在我的程序中不断得到相同的 pid
- OpenSSL C API:如何在程序exec()之后恢复TLS连接?
- 了解在返回值之前和之后使用 EAX 的函数调用
- 为什么垃圾价值在帐户余额之后到来