dynamic_cast

dynamic_cast

В языке программирования C++, оператор dynamic_cast является частью механизма динамической идентификации типа данных, который позволяет выполнять приведение типа данных. В отличие от обычного приведения типа в стиле Си, проверка корректности приведения типов производится во время выполнения программы. Оператор dynamic_cast может быть применён к указателям или ссылкам. В случае если осуществляется преобразование указателя к типу данных, который не является фактическим типом объекта, в результате преобразования будет получен нулевой указатель. При работе с ссылками при невозможности преобразования типа будет сгенерировано исключение std::bad_cast. Таким образом, оператор dynamic_cast обнаруживает сходство в процедуре приведения типа с таким языком программирования как Java, в отличие от Си, в котором не выполняется проверка корректности приведения типа во время выполнения программы.

Пример

Предположим, что некоторая функция принимает объект типа A в качестве аргумента и должна выполнить некоторые дополнительные действия в случае, если переданный в функцию объект фактически является объектом типа B - наследником класса A. Такое поведение может быть достигнуто при использовании dynamic_cast следующим образом.


#include <typeinfo> // Для std::bad_cast
#include <iostream> // Для std::cerr и др.
 
class A
{
public:
        // Механизм динамической идентификации типа данных доступен только для полиморфных 
        // классов (т.е. классов, содержащих хотя бы одну виртуальную функцию-член)
        virtual void foo();
 
        // другие члены класса...
};
 
class B : public A
{
public:
        void methodSpecificToB();
 
        // другие члены класса...
};
 
void my_function(A& my_a)
{
        try
        {
                B& my_b = dynamic_cast<B&>(my_a);
                my_b.methodSpecificToB();
        }
        catch (const std::bad_cast& e)
        {
                std::cerr << e.what() << std::endl;
                std::cerr << "Этот объект не является объектом типа B" << std::endl;
        }
}

Аналогичный код для функции my_function может быть записан с использованием указателей вместо ссылок:


void my_function(A* my_a)
{
        B* my_b = dynamic_cast<B*>(my_a);
 
        if (my_b)
                my_b->methodSpecificToB();
        else
         std::cerr << "Этот объект не является объектом типа B" << std::endl;
 
}

См. также

Ссылки


Wikimedia Foundation. 2010.

Игры ⚽ Нужно решить контрольную?

Полезное


Смотреть что такое "dynamic_cast" в других словарях:

  • dynamic_cast — Dans le langage de programmation C++, l opérateur dynamic cast est un membre du système de run time type information (RTTI) qui effectue une conversion de type. Cependant, contrairement au cast hérité du langage C, une vérification du type est… …   Wikipédia en Français

  • dynamic_cast — In the C++ programming language, the dynamic cast operator is a part of the run time type information (RTTI) system that performs a typecast. Unlike an ordinary C style typecast, a type safety check is performed at runtime, and if the types are… …   Wikipedia

  • Dynamic cast — В языке программирования C++, оператор dynamic cast является частью механизма динамической идентификации типа данных, который позволяет выполнять приведение типа данных. В отличие от обычного приведения типа в стиле Си, проверка корректности… …   Википедия

  • Multiple dispatch — Theories and practice of polymorphism Double dispatch Multiple dispatch Operator overloading Polymorphism in computer science Polymorphism in OOP Subtyping …   Wikipedia

  • Dynamic cast — In the C++ programming language, the dynamic cast operator is a part of the run time type information (RTTI) system that performs a typecast. However, unlike an ordinary C style typecast, a type safety check is incurred at runtime, and it will… …   Wikipedia

  • Динамическая идентификация типа данных — Не следует путать с динамической типизацией. Динамическая идентификация типа данных (англ. Run time type information, Run time type identification, RTTI)  механизм в некоторых языках программирования, который позволяет определить тип… …   Википедия

  • Run-time type information — In programming, RTTI (Run Time Type Information, or Run Time Type Identification) refers to a C++ system that keeps information about an object s data type in memory at runtime. Run time type information can apply to simple data types, such as… …   Wikipedia

  • Динамическая идентификация типа — данных (англ. Run time Type Information, Run time Type Identification, RTTI)  механизм, реализованный в языках программирования, который позволяет определить тип данных переменной или объекта во время выполнения программы. Содержание 1 Реализация …   Википедия

  • Множественная диспетчеризация — Мультиметод (англ. multimethod) или множественная диспетчеризация (англ. multiple dispatch) это механизм, позволяющий выбрать одну из нескольких функций в зависимости от динамических типов аргументов. Таким образом, в отличие от обычных… …   Википедия

  • Operators in C and C++ — This is a list of operators in the C and C++ programming languages. All the operators listed exist in C++; the fourth column Included in C , dictates whether an operator is also present in C. Note that C does not support operator overloading.… …   Wikipedia


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»