为什么垃圾价值在帐户余额之后到来

Why the garbage values is coming after account balance

本文关键字:余额 之后 为什么      更新时间:2023-10-16

当我执行此功能时,垃圾值将带有帐户余额信息。谁能帮我为什么?

#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";
}