Почему значения мусора идут после баланса счета - PullRequest
0 голосов
/ 26 июня 2019

Когда я выполняю это, прибывает значение мусора с информацией об остатке на счете.Кто-нибудь может мне помочь, почему?

#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 A\n\n"<<a.display()<<endl;
cout<<"\nAccount details of B\n\n"<<b.display();
return 0;
}

Ответы [ 4 ]

1 голос
/ 26 июня 2019

Функция display() должна возвращать void в этом случае.Ваша версия имеет в своей подписи, что она возвращает int, но тогда вы ничего не возвращаете.Это приводит к неопределенному поведению.

Также плохой практикой является использование using namespace std и #include<bits/stdc++.h>.

. Прочтите здесь Почему "используется пространство имен std;"считается плохой практикой?

А здесь Как #includeработа в 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 A\n\n";
    a.display();                             // this is how to use display

    std::cout<<"\nAccount details of B\n\n";
    b.display();
    return 0;
}
0 голосов
/ 26 июня 2019

Скорее всего, это то, чего вы хотели достичь:
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 A\n" << a << endl;
    cout << "\nAccount details of B\n" << b << endl;
    return 0;
}
0 голосов
/ 26 июня 2019

Ваша int display() функция не возвращает int, поэтому вы будете иметь неопределенное поведение после вызова этой функции. Если он вернул int, это число было напечатано, но я подозреваю, что это не то, что вы хотели.

Мусор, который вы видите - это int, выбранный из стека (потому что display() должен был положить туда int). По какой-то причине он был помещен в какую-то другую функцию, но теперь ее нет, поэтому может случиться что угодно. Чтобы избежать этого, вы могли бы объявить свою функцию void display() - но тогда вы не сможете ее транслировать, что, как она выглядит, вы хотите сделать.

Если вы хотите иметь возможность потоковой передачи ваших объектов, вам нужно определить операторы потоковой передачи для выполнения этой работы. Я заменил вашу функцию display() на оператор вывода потока (operator<<) здесь:

#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 A\n\n" << a << "\n";
    cout << "\nAccount details of B\n\n" << b << "\n";
}
0 голосов
/ 26 июня 2019

Вы вставляете в std :: cout, среди прочего, результат, возвращаемый из функции display это должно быть int, но, учитывая, что ваша функция не имеет оператора return, все возможно, в основном вы отправляете неопределенное значение в ostream cout, и это то, что мусор по определению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...