Bird
Raised Fist0
C++programming~5 mins

Multiple catch blocks in C++ - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the purpose of multiple catch blocks in C++?
Multiple catch blocks allow a program to handle different types of exceptions separately, providing specific responses based on the exception type.
Click to reveal answer
beginner
How does C++ decide which catch block to execute when an exception is thrown?
C++ checks the type of the thrown exception and matches it with the first compatible catch block in order. It executes the first matching catch block it finds.
Click to reveal answer
intermediate
Can you have a catch block that catches all exceptions regardless of type? How?
Yes, by using a catch block with ellipsis syntax: catch(...). This block catches any exception not caught by previous catch blocks.
Click to reveal answer
intermediate
What happens if no catch block matches the thrown exception?
If no catch block matches, the program calls std::terminate() and usually ends abruptly, unless the exception is caught elsewhere.
Click to reveal answer
beginner
Write a simple example of multiple catch blocks handling different exception types.
Example:<br><pre>try {
  throw 10;
} catch (int e) {
  std::cout << "Caught int: " << e << std::endl;
} catch (const std::exception& e) {
  std::cout << "Caught std::exception: " << e.what() << std::endl;
} catch (...) {
  std::cout << "Caught unknown exception" << std::endl;
}</pre>
Click to reveal answer
What keyword is used to handle exceptions in C++?
Acatch
Btry
Cthrow
Dexcept
Which catch block will handle an exception of type std::runtime_error if multiple catch blocks exist?
ANone, it will be ignored
BThe last catch block
CThe catch block with ellipsis <code>catch(...)</code>
DThe first catch block matching <code>std::runtime_error</code> or its base classes
What does catch(...) do?
ACatches all exceptions not caught by previous catch blocks
BCatches only exceptions of type ellipsis
CIs invalid syntax
DCatches exceptions of type <code>std::exception</code>
If no catch block matches the thrown exception, what happens?
AException is ignored and program continues
BProgram calls <code>std::terminate()</code> and ends
CException is automatically handled by the OS
DProgram retries the try block
Can multiple catch blocks be used to handle different exception types in the same try block?
ANo, only one catch block is allowed per try
BYes, but only if exceptions are of the same type
CYes, each catch block handles a specific exception type
DNo, catch blocks must be nested
Explain how multiple catch blocks work in C++ and why they are useful.
Think about how you might want to respond differently to different problems.
You got /5 concepts.
    Write a short code snippet using multiple catch blocks to handle an integer exception and a standard exception.
    Start with try, throw an int, then catch int and std::exception separately.
    You got /4 concepts.

      Practice

      (1/5)
      1.

      What is the main purpose of using multiple catch blocks in C++?

      easy
      A. To speed up the program execution
      B. To handle different types of exceptions separately
      C. To avoid using try blocks
      D. To declare multiple variables at once

      Solution

      1. Step 1: Understand the role of catch blocks

        Catch blocks are used to handle exceptions that occur in the try block.
      2. Step 2: Recognize the benefit of multiple catch blocks

        Multiple catch blocks allow handling different exception types separately, so each error can be managed properly.
      3. Final Answer:

        To handle different types of exceptions separately -> Option B
      4. Quick Check:

        Multiple catch blocks = handle different exceptions [OK]
      Hint: Multiple catch blocks handle different errors separately [OK]
      Common Mistakes:
      • Thinking multiple catch blocks speed up code
      • Confusing catch blocks with variable declarations
      • Believing try blocks are not needed with multiple catch blocks
      2.

      Which of the following is the correct syntax to catch any remaining exceptions in multiple catch blocks in C++?

      try {
          // code
      }
      catch (int e) {
          // handle int
      }
      _____ {
          // handle other
      }
      easy
      A. catch (...)
      B. catch (string e)
      C. catch (double e)
      D. catch (char e)

      Solution

      1. Step 1: Identify the syntax for catch-all block

        The catch(...) block catches any exception type not caught by previous catch blocks.
      2. Step 2: Confirm correct syntax

        Only catch(...) uses ellipsis and no variable type, making it the correct syntax for a generic catch block.
      3. Final Answer:

        catch (...) -> Option A
      4. Quick Check:

        catch(...) = catch all exceptions [OK]
      Hint: Use catch(...) to catch all exceptions generically [OK]
      Common Mistakes:
      • Using catch without parentheses
      • Trying to catch unknown types without ellipsis
      • Misplacing catch blocks after try
      3.

      What will be the output of the following C++ code?

      try {
          throw 10;
      }
      catch (double e) {
          std::cout << "Double exception";
      }
      catch (int e) {
          std::cout << "Integer exception: " << e;
      }
      medium
      A. Compilation error
      B. Double exception
      C. No output
      D. Integer exception: 10

      Solution

      1. Step 1: Identify the thrown exception type

        The code throws an integer exception with value 10.
      2. Step 2: Match thrown exception with catch blocks

        The first catch block expects a double, so it is skipped. The second catch block matches int, so it executes and prints the message.
      3. Final Answer:

        Integer exception: 10 -> Option D
      4. Quick Check:

        throw int = catch int block runs [OK]
      Hint: Match thrown type with catch parameter type [OK]
      Common Mistakes:
      • Assuming first catch always runs
      • Confusing int and double types
      • Expecting no output if types differ
      4.

      Find the error in this code snippet using multiple catch blocks:

      try {
          throw "error";
      }
      catch (int e) {
          std::cout << "Int error";
      }
      catch (char e) {
          std::cout << "Char error";
      }
      medium
      A. Missing catch block for const char* exception
      B. Try block syntax is incorrect
      C. Cannot throw string literals
      D. Catch blocks must be in reverse order

      Solution

      1. Step 1: Identify the thrown exception type

        The code throws a string literal, which is of type const char*.
      2. Step 2: Check catch blocks for matching types

        Catch blocks handle int and char, but not const char*. So no catch block matches the thrown exception, causing an unhandled exception.
      3. Final Answer:

        Missing catch block for const char* exception -> Option A
      4. Quick Check:

        Thrown type must match catch parameter [OK]
      Hint: Catch blocks must match thrown exception types exactly [OK]
      Common Mistakes:
      • Assuming char catch handles string literals
      • Thinking try block syntax is wrong
      • Believing catch order matters for unrelated types
      5.

      Consider this code with multiple catch blocks:

      try {
          throw std::runtime_error("runtime error");
      }
      catch (std::exception& e) {
          std::cout << "Exception: " << e.what();
      }
      catch (std::runtime_error& e) {
          std::cout << "Runtime error: " << e.what();
      }

      What will be the output and why?

      hard
      A. Exception: runtime error
      B. Runtime error: runtime error
      C. Compilation error due to catch order
      D. No output because exception is not caught

      Solution

      1. Step 1: Understand exception inheritance

        std::runtime_error is derived from std::exception, so it matches both catch blocks.
      2. Step 2: Analyze catch block order

        The first catch block catches std::exception by reference, so it catches the thrown runtime_error before the second catch block is reached.
      3. Step 3: Determine output

        The first catch block prints "Exception: runtime error" using e.what().
      4. Final Answer:

        Compilation error due to catch order -> Option C
      5. Quick Check:

        Derived class catch must come before base class catch to avoid compilation error [OK]
      Hint: Catch derived exceptions before base to avoid compilation error [OK]
      Common Mistakes:
      • Expecting derived catch to run first
      • Thinking catch order causes no compilation error
      • Assuming no output if multiple matches
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard