📜  使用C++中的类进行异常处理

📅  最后修改于: 2021-05-30 13:47:09             🧑  作者: Mango

在本文中,我们将讨论如何使用类来处理异常。

异常处理:

  • 异常是程序在执行过程中遇到的运行时异常或异常情况。
  • 有两种类型的例外:
    • 同步异常
    • 异步异常(例如:超出程序的控制范围,光盘故障等)。
  • 为此,C++提供了以下专用关键字:
    • try 表示可能引发异常的代码块。
    • catch 表示抛出特定异常时执行的代码块。
    • throw 用于引发异常。也用于列出函数引发但无法自行处理的异常。

问题陈述:

  • 创建一个具有两个数据成员ab的Numbers类。
  • 编写迭代函数以查找两个数字的GCD。
  • 编写一个迭代函数以检查任何给定的数字是否为质数。如果发现为,则将异常抛出给MyPrimeException类。
  • 定义自己的MyPrimeException类。

解决方案:

  • 定义一个名为Number的类,该类具有两个私有数据成员ab
  • 将两个成员函数定义为:
    • int gcd():计算两个数字的HCF。
    • bool isPrime():检查给定的数字是否为质数。
  • 使用用于初始化数据成员的构造函数。
  • 以另一个名为Temporary的类为例,当抛出异常时将调用该类。

以下是说明使用类的异常处理的概念的实现:

C++
// C++ program to illustrate the concept
// of exception handling using class
  
#include 
using namespace std;
  
// Class declaration
class Number {
private:
    int a, b;
  
public:
    // Constructors
    Number(int x, int y)
    {
        a = x;
        b = y;
    }
  
    // Function that find the GCD
    // of two numbers a and b
    int gcd()
    {
        // While a is not equal to b
        while (a != b) {
  
            // Update a to a - b
            if (a > b)
                a = a - b;
  
            // Otherwise, update b
            else
                b = b - a;
        }
  
        // Return the resultant GCD
        return a;
    }
  
    // Function to check if the
    // given number is prime
    bool isPrime(int n)
    {
        // Base Case
        if (n <= 1)
            return false;
  
        // Iterate over the range [2, N]
        for (int i = 2; i < n; i++) {
  
            // If n has more than 2
            // factors, then return
            // false
            if (n % i == 0)
                return false;
        }
  
        // Return true
        return true;
    }
};
  
// Empty class
class MyPrimeException {
};
  
// Driver Code
int main()
{
    int x = 13, y = 56;
  
    Number num1(x, y);
  
    // Print the GCD of X and Y
    cout << "GCD is = "
         << num1.gcd() << endl;
  
    // If X is prime
    if (num1.isPrime(x))
        cout << x
             << " is a prime number"
             << endl;
  
    // If Y is prime
    if (num1.isPrime(y))
        cout << y
             << " is a prime number"
             << endl;
  
    // Exception Handling
    if ((num1.isPrime(x))
        || (num1.isPrime(y))) {
  
        // Try Block
        try {
            throw MyPrimeException();
        }
  
        // Catch Block
        catch (MyPrimeException t) {
  
            cout << "Caught exception "
                 << "of MyPrimeException "
                 << "class." << endl;
        }
    }
  
    return 0;
}


输出:
GCD is = 1
13 is a prime number
Caught exception of MyPrimeException class.
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”