丢失一次增加额外的复杂性

时间:2012-09-09 05:01:51

标签: c++

这样看起来似乎没有上下文,所以我不必重新发布我的所有代码,这是我原来的问题:Object is initializing to unwanted value

问题:如何在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();
        }
    }
}

2 个答案:

答案 0 :(得分:2)

创建一个Account类,该类实现printReciept()和任何帐户类型共有的其他方法。然后创建从Account。继承的CheckingAccount和SavingsAccount。

答案 1 :(得分:1)

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

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

BankAccount需要通过引用(指针或参考,对我来说没什么区别,但我是一个反对的人)。它应该是一个引用,并在构造中在object-initializer列表中初始化:

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

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

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