【问题标题】:Lost once adding extra complexity一旦增加了额外的复杂性就迷失了
【发布时间】:2012-09-09 05:01:51
【问题描述】:

所以这似乎不太脱离上下文,所以我不必重新发布我的所有代码,这是我最初的问题: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();
        }
    }
}

【问题讨论】:

  • 我看到了你的另一个问题,已经解决了,但是这个问题没有多大意义(并且缺少问号)。
  • 那么,又是什么问题呢?
  • 对不起,这是我的问题的一个更正式的问题:如何创建一个函数,有条件地选择用于交易的银行账户(即支票或储蓄)?或者我应该创建另一个具有此功能的类作为成员吗?
  • 我不知道这里的问题是什么。再次“重新询问”同一个问题以希望得到不同的答案也是不可接受的(“它已经有了答案,所以我重新询问以获得新的答案。”)。您需要编辑此问题以提出实际问题(与另一个问题不同),并编辑问题,而不是在 cmets 中发布信息。 (将这些信息添加到问题本身意味着人们无需阅读所有 cmets 即可看到它,并且它使您的问题更加清晰。它还可以减少噪音和混乱。)
  • 这实际上是一个不同于他原来的问题。我同意他应该在实际问题中发表评论。但同样最好忘记前面提到的问题并简单地说明他的新问题并附上样本。而且,我们可能需要完整的代码,以便 this 问题的观察者了解上下文,而不必深入研究后者。

标签: c++


【解决方案1】:

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

【讨论】:

  • 我会试一试并回复您。感谢您的建议!
【解决方案2】:

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

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

BankAccount 需要通过引用(指针或 ref,对我没有区别,但我是一个 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 循环之外。实际上,您的交易持有对自己内部银行账户副本的累积修改。原件未经修改。

【讨论】:

  • 虽然这不是我问题的直接答案,但它是有用的建议。我总是对返回/使用引用的想法感到焦虑,但我猜在这种情况下,与 m_bao=bao 相比,初始化 m_bao(bao) 是正确的,我接近了吗?
  • 如果成员是参考,你甚至不能做后者。您必须在初始化列表中对其进行初始化,这是正确的做法。您之前所做的是在事务对象中创建一个默认构造的银行帐户,然后触发默认赋值运算符以复制参数,之后保持不变。使用上面的代码在调试器中进行操作以查看,最重要的是,继续插入。这里的每个人都会在某个时候学习如何做到这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-15
  • 2019-10-08
  • 1970-01-01
  • 2016-05-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多