cout打印内存地址而不是值

时间:2020-01-01 21:31:59

标签: c++

我看到了另一个与此基本相同的问题,但是它包含了指针,并且我的代码中没有指针。 我正在尝试练习使用类,尤其是访问修饰符。 我在名为Bankaccount的头文件中创建了一个类。当我尝试打印私有变量“ balance”时,它会打印出我认为是地址的地址,因为它是一堆随机数,但是其中没有字母,就像我见过的大多数十六进制地址一样。我不太确定为什么会这样。 我正在使用Microsoft Visual Studios 2019.我已包含以下所有代码(源文件和头文件)。 如果有人可以让我知道为什么要打印变量“ balance”的地址,那么请告诉我。 另外,您想对我的任何代码添加任何建设性的批评(因为我是初学者),请添加。 非常感谢。

头文件

#pragma once
#include <iostream>
using namespace std;

class Bankaccount {
public:
    Bankaccount() {
        int choice;
        cout << "Constructor run properly." << endl;
        cout << "You have created a bank account." << endl;
        cout << "What will the name of the account be?   Name: ";
        cin >> accoutName;
        cout << "What would you like to do with this account?\nDeposit: Press 1" << endl;
        cin >> choice;
        if (choice == 1) {
            int depo;
            cout << "Deposit amount: ";
            cin >> depo;
            deposit(depo);
            cout << "$" << depo << " dollars has been added to your account." << endl;
        }

    }
    int deposit(int deposit) {
        balance += deposit;
        return balance;
    }
    void getBalance() {
        cout << "your balance is: " << balance << endl;
    }
    ~Bankaccount() {
        cout << "Destructor run properly." << endl;
    }

private:
    string accoutName;
    int balance;
};

源文件

#include <iostream>
#include "bank.h"

int main() {
    Bankaccount Joseph;
    Joseph.getBalance();
}

2 个答案:

答案 0 :(得分:1)

这不是为balance打印的内存地址。它是未初始化变量的输出。

问题是创建balance对象时Bankaccount未初始化。构造balance对象时,您应该初始化Bankaccount

class Bankaccount 
{
   int balance;
   public:
       Bankaccount() : balance(0) { 
       // ...
       }
};

答案 1 :(得分:0)

当您执行import pandas as pd peg1 = df['price'].sub(df['price'].shift(1)) == 1 # rolling cumcount peg2 = df['price'].sub(df['price'].shift(1)) > 1 # -5 these vals peg3 = df['price'].sub(df['price'].shift(1)) <= -1 # keep as row above. #assignments df.loc[peg1,'counter'] = df['counter'].ffill() + peg1.cumsum() df.loc[peg2,'counter'] = df['price'] - 5 df.loc[peg3,'counter'] = df['counter'].ffill() df.loc[df['counter'] > df['price'], 'counter'] = 'STOP' print(df) price peg counter 0 1000 0995 995 1 1001 0996 996 2 1002 0997 997 3 1001 0997 997 4 1010 1005 1005 5 1012 1007 1007 6 1010 1007 1007 7 1006 STOP STOP 时,会在堆栈上为Bankaccount Joseph;对象分配空间(此处,这意味着为其成员Bankaccountbalance分配了空间)。构造对象时,构造函数有责任初始化所有成员以具有正确的初始值。例如,当创建accoutName时,将Bankaccount设置为balance。如果不这样做,则仅声明内存但未初始化(它可能包含一些垃圾值-可能来自恰好使用该空间的先前函数)。

在您的代码中0未设置为balance-它有一些垃圾。当用户输入新的0数量时,它会添加到该垃圾中并产生一个值,该值看起来也像垃圾值。您可以在进入构造函数的第一件事。

deposit

(请注意:类型Bankaccount() { deposit = 0; 的{​​{1}}不是原始数据类型,它是在其他地方构造的,其构造函数将确保它以空字符串accountName开头。它只是包装string s的托管数组。)