C++ では、派生クラスの例外は基本クラスのポインターを通じてキャッチできます。仮想関数と try-catch ブロックを使用すると、次のことが可能になります。 派生クラスの例外をスローする 基本クラスのポインターを使用してキャッチする 基本クラスのポインターを削除することで、派生クラスのオブジェクトを自動的に解放します
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_ptr
rrreeeGetArea()
は、派生クラス Square
で例外をスローします。 🎜main()
関数で、Square
オブジェクトを指す Shape*
ポインターを作成します。 🎜shape->GetArea()
が呼び出されると、実際には派生クラスのオーバーライド関数が呼び出され、例外がスローされます。 🎜catch
ブロックは、基本クラス ポインター base_ptr
を使用して例外オブジェクトをキャッチします。 🎜base_ptr
を削除し、派生クラス オブジェクトへのポインターを自動的に解放します。 🎜🎜以上がC++ テクノロジにおける例外処理: 基本クラス ポインターを介して派生クラスの例外をキャッチするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。