这样看起来似乎没有上下文,所以我不必重新发布我的所有代码,这是我原来的问题: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();
}
}
}
答案 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循环之外。实际上,您的交易持有对其内部银行帐户副本的累积修改。原件未经修改。