bad_cast, wyjątekbad_cast exception

Wyjątek bad_cast jest zgłaszany przez dynamic_cast operatora jako wynik nieudanego rzutowania na typ referencyjny.The bad_cast exception is thrown by the dynamic_cast operator as the result of a failed cast to a reference type.

SkładniaSyntax

catch (bad_cast)
   statement

UwagiRemarks

Interfejs dla bad_cast jest:The interface for bad_cast is:

class bad_cast : public exception

Poniższy kod zawiera przykład błędu dynamic_cast , który zgłasza wyjątek bad_cast .The following code contains an example of a failed dynamic_cast that throws the bad_cast exception.

// expre_bad_cast_Exception.cpp
// compile with: /EHsc /GR
#include <typeinfo>
#include <iostream>

class Shape {
public:
   virtual void virtualfunc() const {}
};

class Circle: public Shape {
public:
   virtual void virtualfunc() const {}
};

using namespace std;
int main() {
   Shape shape_instance;
   Shape& ref_shape = shape_instance;
   try {
      Circle& ref_circle = dynamic_cast<Circle&>(ref_shape);
   }
   catch (bad_cast b) {
      cout << "Caught: " << b.what();
   }
}

Wyjątek jest zgłaszany, ponieważ obiekt, który jest rzutowany (kształt) nie pochodzi od określonego typu rzutowania (koło).The exception is thrown because the object being cast (a Shape) isn't derived from the specified cast type (Circle). Aby uniknąć wyjątku, Dodaj następujące deklaracje do main :To avoid the exception, add these declarations to main:

Circle circle_instance;
Circle& ref_circle = circle_instance;

Następnie Wycofaj sens rzutowania w try bloku w następujący sposób:Then reverse the sense of the cast in the try block as follows:

Shape& ref_shape = dynamic_cast<Shape&>(ref_circle);

Elementy członkowskieMembers

KonstruktoryConstructors

KonstruktorConstructor OpisDescription
bad_castbad_cast Konstruktor dla obiektów typu bad_cast .The constructor for objects of type bad_cast.

FunkcjeFunctions

FunkcjaFunction OpisDescription
Whatmanwhat TBDTBD

OperatoryOperators

OperatorOperator OpisDescription
operator =operator= Operator przypisania przypisujący jeden bad_cast obiekt do innego.An assignment operator that assigns one bad_cast object to another.

bad_castbad_cast

Konstruktor dla obiektów typu bad_cast .The constructor for objects of type bad_cast.

bad_cast(const char * _Message = "bad cast");
bad_cast(const bad_cast &);

operator =operator=

Operator przypisania przypisujący jeden bad_cast obiekt do innego.An assignment operator that assigns one bad_cast object to another.

bad_cast& operator=(const bad_cast&) noexcept;

Whatmanwhat

const char* what() const noexcept override;

Zobacz teżSee also

Operator dynamic_castdynamic_cast Operator
SłużącKeywords
Nowoczesne najlepsze rozwiązania w języku C++ dotyczące wyjątków i obsługi błędówModern C++ best practices for exceptions and error handling