ホームページ  >  記事  >  バックエンド開発  >  C++ テクノロジにおける例外処理: 基本クラス ポインターを介して派生クラスの例外をキャッチするにはどうすればよいですか?

C++ テクノロジにおける例外処理: 基本クラス ポインターを介して派生クラスの例外をキャッチするにはどうすればよいですか?

WBOY
WBOYオリジナル
2024-05-09 17:39:01899ブラウズ

C++ では、派生クラスの例外は基本クラスのポインターを通じてキャッチできます。仮想関数と try-catch ブロックを使用すると、次のことが可能になります。 派生クラスの例外をスローする 基本クラスのポインターを使用してキャッチする 基本クラスのポインターを削除することで、派生クラスのオブジェクトを自動的に解放します

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

C++ での例外処理: 派生クラスのキャッチ基本クラスポインター経由のポインター クラス例外

C++ では、例外処理はエラーと例外を処理するためのメカニズムです。例外が発生すると、例外オブジェクトがスローされます。例外オブジェクトには、エラー メッセージやエラーが発生した場所など、エラーに関する情報が保存されます。

基本クラス ポインターを介して派生クラスの例外をキャッチすることは、派生クラスからの例外を処理する柔軟な方法です。これは、try-catch ブロックと仮想関数を使用して実現されます。

コード例:

基本クラス Shape と派生クラス Square があると仮定します。 Shape クラスには仮想関数 GetArea() があり、Square クラスはこれをオーバーライドします。 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
説明: 🎜🎜
  • GetArea() は、派生クラス Square で例外をスローします。 🎜
  • main() 関数で、Square オブジェクトを指す Shape* ポインターを作成します。 🎜
  • shape->GetArea() が呼び出されると、実際には派生クラスのオーバーライド関数が呼び出され、例外がスローされます。 🎜
  • catch ブロックは、基本クラス ポインター base_ptr を使用して例外オブジェクトをキャッチします。 🎜
  • 基本クラスのポインターをキャプチャすることで、派生クラスからの例外を処理できます。 🎜
  • 最後に、base_ptr を削除し、派生クラス オブジェクトへのポインターを自動的に解放します。 🎜🎜

以上がC++ テクノロジにおける例外処理: 基本クラス ポインターを介して派生クラスの例外をキャッチするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。