In C++ können abgeleitete Klassenausnahmen über Basisklassenzeiger abgefangen werden. Mit virtuellen Funktionen und Try-Catch-Blöcken können wir: eine abgeleitete Klassenausnahme auslösen, sie mit einem Basisklassenzeiger abfangen, das abgeleitete Klassenobjekt automatisch freigeben, indem wir den Basisklassenzeiger löschen.
Ausnahmebehandlung in C++: Abgeleitete Klasse abfangen Zeiger über Basisklassenzeiger Klassenausnahmen
In C++ ist die Ausnahmebehandlung ein Mechanismus zur Behandlung von Fehlern und Ausnahmen. Wenn eine Ausnahme auftritt, wird ein Ausnahmeobjekt ausgelöst. Ausnahmeobjekte speichern Informationen über den Fehler, beispielsweise die Fehlermeldung und den Ort, an dem der Fehler aufgetreten ist.
Das Abfangen abgeleiteter Klassenausnahmen über Basisklassenzeiger ist eine flexible Möglichkeit, Ausnahmen von abgeleiteten Klassen zu behandeln. Dies wird durch Try-Catch-Blöcke und virtuelle Funktionen erreicht.
Codebeispiel:
Angenommen, wir haben eine Basisklasse Shape und eine abgeleitete Klasse Square. Die Shape-Klasse verfügt über eine virtuelle Funktion GetArea()
, die von der Square-Klasse überschrieben wird. 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()
löst eine Ausnahme in einer abgeleiteten Klasse Square
aus. 🎜main()
erstellen wir einen Shape*
-Zeiger, der auf ein Square
-Objekt zeigt. 🎜shape->GetArea()
aufgerufen wird, ruft es tatsächlich die überschreibende Funktion der abgeleiteten Klasse auf und löst eine Ausnahme aus. 🎜catch
-Block verwendet den Basisklassenzeiger base_ptr
, um das Ausnahmeobjekt abzufangen. 🎜base_ptr
und geben automatisch den Zeiger auf das abgeleitete Klassenobjekt frei. 🎜🎜Das obige ist der detaillierte Inhalt vonAusnahmebehandlung in der C++-Technologie: Wie kann man abgeleitete Klassenausnahmen über Basisklassenzeiger abfangen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!