Start learning free

LESSON 608 OF 634 · OBJECT-ORIENTED PROGRAMMING

Errors and Exceptions in C++ in C++

Lesson

TL ; DR:

When a method can't do what it was asked, it throws an exception. The code that called it catches the exception with try and catch.


void spend(int amount) {
    if (amount > money) {
        throw invalid_argument("not enough money");
    }

    money -= amount;
}

try {
    wallet.spend(80);
} catch (const invalid_argument &e) {
    cout << "error: " << e.what() << endl;
}


Full lesson:

Some requests can't be done. A wallet with 50 can't spend 80.

The method could return a special value, like -1. But the caller may forget to check it. Then the program goes on with a wrong number.

An exception is better. It is an error that the program can't miss.

Throwing an exception

  • throw invalid_argument("not enough money") stops the method at once.
  • The lines after it don't run. So the wallet keeps its money.
  • invalid_argument is a built-in exception from <stdexcept>.
  • The text in the parentheses is the exception's message.

Catching it

  • Put the call inside a try block.
  • When the call throws, the rest of the try block is skipped.
  • The catch block for that type runs instead. e is the exception.
  • The & catches the exception itself, without making a copy.
  • e.what() returns its message.
  • Then the program goes on below the catch block.

An exception that nobody catches stops the whole program.


Your task

A Wallet starts with 50. Its spend method takes money out and returns what is left.

  • In spend, throw an invalid_argument when amount is more than money. Its message is "not enough money".
  • In the loop, call spend inside a try block. Print what was spent and what is left.
  • Catch the exception. Print error: and its message.

The loop tries to spend 20, then 40, then 30.

Expected output:

spent 20, 30 left
error: not enough money
spent 30, 0 left
STEP 1 OF 3
    Ctrl + Enter to check

    Raising Errors in C++

    Keep going with C++500+ step-by-step lessons, from your first line of code to coding interviews. Free to start.
    Start learning free