Dynamic cast

Dynamic cast

dynamic_cast

В языке программирования C++, оператор dynamic_cast является частью механизма динамической идентификации типа данных, который позволяет выполнять приведение типа данных. В отличие от обычного приведения типа в стиле Си, проверка корректности приведения типов производится во время выполнения программы. Оператор dynamic_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 — 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

  • Dynamic loading — is a mechanism by which a computer program can, at run time, load a library (or other binary) into memory, retrieve the addresses of functions and variables contained in the library, execute those functions or access those variables, and unload… …   Wikipedia

  • Dynamic load testing — of piles is a fast and effective method of assessing foundation bearing capacity that requires instrumenting a deep foundation with accelerometers and strain transducers and analyzing data collected by these sensors. The procedure is based on the …   Wikipedia

  • Cast-Nephropathie — Klassifikation nach ICD 10 C90.0+ Plasmozytom (Multiples Myelom) N08.1* Glomeruläre Krankheiten bei Neubildungen Glomeruläre Krankheiten bei Plasmozytom …   Deutsch Wikipedia

  • C dynamic memory allocation — C Standard Library Data types Character classification Strings Mathematics File input/output Date/time Localization …   Wikipedia

  • Operation Cast Lead — Operation Gegossenes Blei Teil von: Nahostkonflikt Karte des Gazastreifens …   Deutsch Wikipedia

  • List of Heroes cast members — This is a list of recurring actors on the US television show Heroes . Every actor credited in two episodes or more is included in the article, which covers episodes 1.01 to 3.04. Main castThis list shows the show s main cast, and the number of… …   Wikipedia

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

  • Comparison of programming languages — Programming language comparisons General comparison Basic syntax Basic instructions Arrays Associative arrays String operations …   Wikipedia

  • Type conversion — This article is about the computer science concept. For the aviation licensing process, see Type conversion (aviation). In computer science, type conversion, typecasting, and coercion refers to different ways of, implicitly or explicitly,… …   Wikipedia


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

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