Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法打印内存地址而不是值_C++ - Fatal编程技术网

C++ 无法打印内存地址而不是值

C++ 无法打印内存地址而不是值,c++,C++,我看到了另一个与此基本相同的问题,但是它包含指针,我的代码中没有指针。 我试图练习使用类,特别是访问修饰符。 我在名为Bankaccount的头文件中创建了一个类。当我试图打印出私有变量“balance”时,它会打印出我认为是地址的内容,因为它是一组随机数,但是它没有像我见过的大多数十六进制地址那样的字母。我不太清楚为什么会发生这种情况。 我正在使用Microsoft Visual Studio 2019。我已经包括了下面的所有代码(源文件和头文件)。 如果有人能告诉我为什么打印变量“balan

我看到了另一个与此基本相同的问题,但是它包含指针,我的代码中没有指针。 我试图练习使用类,特别是访问修饰符。 我在名为Bankaccount的头文件中创建了一个类。当我试图打印出私有变量“balance”时,它会打印出我认为是地址的内容,因为它是一组随机数,但是它没有像我见过的大多数十六进制地址那样的字母。我不太清楚为什么会发生这种情况。 我正在使用Microsoft Visual Studio 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;
};
#pragma一次
#包括
使用名称空间std;
类别银行帐户{
公众:
银行帐户(){
智力选择;

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

问题是在创建
银行账户
对象时,
余额
未初始化。在构建
银行账户
对象时,应初始化
余额

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

当您执行
Bankaccount操作时,
Bankaccount
对象在堆栈上分配了空间(这里,这意味着为其成员
balance
accountName
分配了空间)。当构造对象时,构造函数负责初始化所有成员以获得正确的初始值。例如,当创建
银行帐户时,将
余额设置为
0
。如果不这样做,则只声明内存,但不初始化(它可能包含一些垃圾值-可能来自之前使用此空间的函数)

在您的代码中,
余额
未设置为
0
-它有一些垃圾。当用户输入新的
存款
金额时,它将被添加到此垃圾中,并生成一个看起来也像垃圾值的值。您可以在输入构造函数的第一件事中执行此操作

Bankaccount() {
    deposit = 0;

(请注意:
string
类型的
accountName
不是一个原始数据类型,它是在其他地方构造的,其构造函数将确保它首先包含一个空字符串
。它只是包装一个
char
的托管数组。)

Hint——这不是正在打印的内存地址,它是一个随机值。Hint 2——
balance
变量的初始化有smth错误。构造函数应该给
balance
一个初始值。另外,
Bankaccount
构造函数不应该真正嵌入输入例程。什么t如果有人想用已知的数据创建一个
银行账户
?你对错误原因的假设越少,你就越不可能出错。把你的问题集中在观察到的内容上,并将猜测降到(最多)一个尾声上。(此外,这对你来说可能是有用的。)哦,天哪,我刚读到关于成员初始值设定项列表XD的内容。非常感谢您的快速反馈。老实说,当我读到您回复的第二部分时,我笑了。您解释得非常好,谢谢。
Bankaccount() {
    deposit = 0;