Maison  >  Article  >  développement back-end  >  Gestion des exceptions dans la technologie C++ : comment intercepter les exceptions de classe dérivée via des pointeurs de classe de base ?

Gestion des exceptions dans la technologie C++ : comment intercepter les exceptions de classe dérivée via des pointeurs de classe de base ?

WBOY
WBOYoriginal
2024-05-09 17:39:01855parcourir

En C++, les exceptions de classe dérivée peuvent être interceptées via des pointeurs de classe de base. En utilisant des fonctions virtuelles et des blocs try-catch, nous pouvons : Lancer une exception de classe dérivée L'attraper à l'aide d'un pointeur de classe de base Libérer automatiquement l'objet de classe dérivée en supprimant le pointeur de classe de base

C++ 技术中的异常处理:如何通过基类指针来捕获派生类异常?

Gestion des exceptions en C++ : Catch classe dérivée pointeur via le pointeur de classe de base Exceptions de classe

En C++, la gestion des exceptions est un mécanisme de gestion des erreurs et des exceptions. Lorsqu'une exception se produit, un objet d'exception est généré. Les objets d'exception stockent des informations sur l'erreur, telles que le message d'erreur et l'emplacement où l'erreur s'est produite.

La capture des exceptions de classe dérivée via des pointeurs de classe de base est un moyen flexible de gérer les exceptions des classes dérivées. Ceci est réalisé à l’aide de blocs try-catch et de fonctions virtuelles.

Exemple de code :

Supposons que nous ayons une classe de base Shape et une classe dérivée Square. La classe Shape possède une fonction virtuelle GetArea(), que la classe Square remplace. GetArea(),Square 类覆盖了该函数。

class Shape {
public:
    virtual int GetArea() const = 0;
};

class Square : public Shape {
public:
    Square(int side) : side(side) {}
    int GetArea() const override { return side * side; }
private:
    int side;
};

int main() {
    try {
        Shape* shape = new Square(5);
        shape->GetArea();  // 抛出异常
    } catch (Shape* base_ptr) {
        // 捕获 Shape* 指针的基类指针
        delete base_ptr;  // 确保释放派生类对象
        std::cout << "异常捕获成功!" << std::endl;
    }

    return 0;
}

解释:

  • GetArea() 在派生类 Square 中抛出异常。
  • main() 函数中,我们创建一个 Shape* 指针,指向一个 Square 对象。
  • 当调用 shape->GetArea() 时,它实际上调用的是派生类的覆盖函数,并且抛出一个异常。
  • catch 块使用基类指针 base_ptr 捕获异常对象。
  • 通过捕获基类指针,我们可以处理派生类的异常。
  • 最后,我们删除 base_ptrrrreee
Explication : 🎜🎜
  • GetArea() lève une exception dans une classe dérivée Square. 🎜
  • Dans la fonction main(), nous créons un pointeur Shape* pointant vers un objet Square. 🎜
  • Lorsque shape->GetArea() est appelé, il appelle en fait la fonction prioritaire de la classe dérivée et lève une exception. 🎜
  • Le bloc catch utilise le pointeur de classe de base base_ptr pour intercepter l'objet d'exception. 🎜
  • En capturant le pointeur de classe de base, nous pouvons gérer les exceptions des classes dérivées. 🎜
  • Enfin, nous supprimons base_ptr et libérons automatiquement le pointeur vers l'objet de classe dérivé. 🎜🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn