用C ++编辑私有类

时间:2018-10-18 12:55:59

标签: c++ class private

我正在处理此代码。尚未完成。问题是我不明白为什么无法在numAccount中更新my simple_account.h。如果我打印出numAccount,它将一直打印出“ 1”。谁能告诉我为什么我不能在这里访问和更改私有值?

main.cc

#include <iostream>
#include "simple_account.h"
using namespace std;

int main() {
    char job;
    int i = 0;


    while (true) {
        cout << "Job?" << endl;
        cin >> job;
        if (job == 'Q')
            break;
        if (job == 'N') {
            Admin* user = new Admin[10];
            (user+i)->newAccount(i);
            cout << "i: " << i << endl;
            i++;
        }

    }

simple_account.h

#pragma once
#include <iostream>
class Account {
public:
    int id;
    int b = 0;

};

class Admin {
    class Account {
        int id;
        int b = 0;
    };
    int numAccount = 0;
    Account **acnt[10];

public:
    void newAccount();
    void deposit(Account id, int money);
    void withdrawal(Account id, int money);
    void transfer(Account id1, Account id2, int money);
    void check(Account id);
};

simple_acount.cc

#include "simple_account.h"

void Admin::newAccount() {
        numAccount += 1;
}

1 个答案:

答案 0 :(得分:1)

按“ N”打开新帐户时会发生问题。

if (job == 'N') {
            Admin* user = new Admin[10];
            (user+i)->newAccount(i);
            cout << "i: " << i << endl;
            i++;
        }

此代码创建十个新的Admin对象,并使用默认构造函数初始化每个对象。每个管理员都有自己的numAccount成员,该成员初始化为零,因为这是您在此处指定的默认值:int numAccount = 0; 创建十个Admin对象之后,代码然后使用(user+i)选择一个对象并调用newAccount(i)。这不应该编译,因为newAccount()方法没有参数。但是,如果可行,它将使一个Admin的{​​{1}}成员从初始的0增加到1。 (这里还有一个问题,就是当numAccount达到10时,您将尝试在i对象数组之外的地方调用newAccount(),因此您将看到一些未定义的行为。)

如何解决此问题。...取决于您要执行的操作。如建议的那样,您可以使Admin成为numAccounts类的static成员。但是我认为您需要检查设计:Admin是什么,应该有多少?