return 0;
}
Как видите, использование оператора dynamic_cast упрощает логику, необходимую для преобразования указателя на базовый класс в указатель на производный класс. Вот как выглядят результаты выполнения этой программы.
Операция приведения объекта типа Base к типу Derived не выполнилась.
Это объект класса Derived. Операция приведения объекта типа Base к типу Derived не выполнилась. Это объект класса Derived.
И еще. Оператор dynamic_cast можно также использовать применительно к шаблонным классам.
Оператор const_cast переопределяет модификаторы const и/или volatile.
Оператор const_cast используется для явного переопределения модификаторов const и/или volatile. Новый тип должен совпадать с исходным, за исключением его атрибутов const или volatile. Чаще всего оператор const_cast используется для удаления признака постоянства (атрибута const). Его общий формат имеет следующий вид.
const_cast<type> (expr)
Здесь элемент type задает новый тип операции приведения, а элемент expr означает выражение, которое приводится к новому типу.
Использование оператора const_cast демонстрируется в следующей программе.
// Демонстрация использования оператора const_cast.
#include <iostream>
using namespace std;
void f (const int *p)
{
int *v;
// Переопределение const-атрибута.
v = const_cast<int *> (p);
*v = 100; // теперь объект можно модифицировать
}
int main()
{
int x = 99;
cout << "Значение x до вызова функции f(): " << x<< endl;
f (&x);
cout <<"Значение x после вызова функции f(): " << x<< endl;
return 0;
}
Результаты выполнения этой программы таковы.
Значение х до вызова функции f(): 99
Значение х после функции f(): 100
Как видите, переменная x была модифицирована функцией f(), хотя параметр, принимаемый ею, задается как const-указатель.
Необходимо подчеркнуть, что использование оператора const_cast для удаления const-атрибута является потенциально опасным средством. Поэтому обращайтесь с ним очень осторожно.
И еще. Удалять const-атрибут способен только оператор const_cast. Другими словами, ни dynamic_cast, ни static_cast, ни reinterpret_cast нельзя использовать для изменения const-атрибута объекта.