【问题标题】:try-catch exception in c++c++中的try-catch异常
【发布时间】:2016-04-05 03:47:07
【问题描述】:

如果学生列表为空,我被要求使用 try-catch 异常处理来处理这种情况。我是异常处理的新手,有人可以指导我吗?下面是平均方法的实现。我需要使用 try-catch 来确保列表不为空。

double classAverage()
{
  int count = 0;
  double sum = 0.0;
  Container *temp = list;


if (temp == NULL)
{

    cout << "List empty!";
    return -1.0;
}

    while (temp != NULL)
    {

        sum += temp->student->getGrade();
        temp = temp->next;
        count++;
    }
    return sum / count;

}

【问题讨论】:

  • 退回到“糟糕”的设计不是一个好选择,因为您无法让某些东西正常工作。使“正确”的方式发挥作用。 IOW,不要让学生的成绩公开和暴露;让功能正常工作。
  • 您是否将有效的Student* 传递给changeGrade
  • 他们将该指针的副本指向别处,他们不会修改原始文件。我正在尝试找出什么不起作用,因为 OP 不明确
  • 您需要向sum 添加值,因为这是sum 的定义。

标签: c++ exception-handling polymorphism try-catch


【解决方案1】:

由于changeGradeStudent 的朋友,这应该可以:

void changeGrade(Student* s, int newGrade) {
    s->grade = newGrade;
}

现在您将指针s 重新指向一个新的Student 对象。你想要什么 就是改变传入函数的对象。

【讨论】:

    【解决方案2】:

    没有足够的信息,但我认为您的代码可能如下所示:

    Student* student = new Student("John", "Doe", 99, 1);
    changeGrade(student, 9);
    

    这根本不会改变学生,因为你通过值传递指针,所以当你重新分配它时,原始对象(指针student)没有改变。要让调用代码注意到更改,您必须通过 referenceStudent*&amp; - 推荐方式)或使用指向指针的指针(Student**);。另外,如果您使用Student** 方法,请不要忘记删除原始指针(Student*),否则会泄漏内存。


    你不应该绕过不设置int,这可能是不好的做法和混乱。

    【讨论】:

      猜你喜欢
      • 2012-05-04
      • 2013-12-05
      • 2011-09-16
      • 1970-01-01
      • 1970-01-01
      • 2017-01-05
      • 1970-01-01
      • 1970-01-01
      • 2012-08-06
      相关资源
      最近更新 更多