0

就这样,这似乎不太脱离上下文,所以我不必重新发布我的所有代码,这是我最初的问题:对象正在初始化为不需要的值

问题:如何在 for 循环中设计以下代码,使其成为 Transaction 方法,例如 void Transaction::promptUser(),然后询问用户是否愿意在支票或储蓄上执行交易帐户?然后它会询问他们想要做什么交易,这将影响相应的帐户。

   int main () {
 BankAccount checking(0.00);
    BankAccount savings(0.00);
    Transaction c(checking);
    Transaction s(savings);
    for(int i = 0; i < 10 ; i++) {
        cout << "Make an option" << endl;
        cout << "1. Checking "   << endl;
        cout << "2. Savings"     << endl;

        int choice;
        cin >> choice;
        if (choice == 1) {
            c.prompt();
            c.printReciept();
        }
        else {
            s.prompt();
            s.printReciept();
        }
    }
}
4

2 回答 2

2

创建一个实现 printReciept() 和任何帐户类型通用的其他方法的 Account 类。然后创建继承自 Account 的 CheckingAccount 和 SavingsAccount。

于 2012-09-09T05:15:20.113 回答
1

我可以指出你现在最好做的一件事:

class Transaction {
private:
    BankAccount m_bao;
public:
    Transaction(BankAccount&);
    void displayOptions();  
    void printReciept();
};

该 BankAccount 需要通过引用(指针或引用,对我来说没有区别,但我是一个 ref-kinda-guy)。它应该是一个引用并在对象初始化器列表中的构造时初始化:

class Transaction {
private:
    BankAccount& m_bao;
public:
    Transaction(BankAccount&);
    void displayOptions();  
    void printReciept();
};

Transaction::Transaction(BankAccount& bao)
 : m_bao(bao)
{
}

我希望很清楚为什么会这样。每笔交易都在制作银行账户的副本,然后修改该副本。原始账户未受影响。坏的。您可能发现了这一点,但不清楚它发生的原因,因此 Transaction 对象被排除在 for 循环之外。实际上,您的交易持有对自己内部银行账户副本的累积修改。原件未经修改。

于 2012-09-09T05:17:51.543 回答