Операция приведения объекта типа Base к типу Derived не выполнилась.
Это объект класса Derived. Операция приведения объекта типа Base к типу Derived не выполнилась. Это объект класса Derived.
И еще. Оператор dynamic_cast
можно также использовать применительно к шаблонным классам.Оператор const_cast Оператор const_cast переопределяет модификаторы const и/или volatile.
Оператор const_cast
используется для явного переопределения модификаторов const и/или volatile. Новый тип должен совпадать с исходным, за исключением его атрибутов const или volatile. Чаще всего оператор const_cast используется для удаления признака постоянства (атрибута const). Его общий формат имеет следующий вид.
const_cast (expr)
Здесь элемент type
задает новый тип операции приведения, а элемент expr означает выражение, которое приводится к новому типу.Использование оператора const_cast
демонстрируется в следующей программе.
// Демонстрация использования оператора const_cast.
#include
using namespace std;
void f (const int *p)
{
int *v;
// Переопределение const-атрибута.
v = const_cast (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-атрибута объекта.Оператор static_cast Оператор static_cast выполняет операцию неполиморфного приведения типов.
Оператор static_cast
выполняет операцию неполиморфного приведения типов. Его можно использовать для любого стандартного преобразования. При этом во время работы программы никаких проверок на допустимость не выполняется. Оператор static_cast имеет следующий общий формат записи.
static_cast (expr)
Здесь элемент type
задает новый тип операции приведения, а элемент expr означает выражение, которое приводится к этому новому типу.Оператор static_cast
, по сути, является заменителем оригинального оператора приведения типов. Он лишь выполняет неполиморфное преобразование. Например, при выполнении следующей программы переменная типа float приводится к типу int.
// Использование оператора static_cast.
#include
using namespace std;
int main()
{
int i;
float f;
f = 199.22F;
i = static_cast (f);
cout << i;
return 0;
}
Оператор reinterpret_cast
Оператор reinterpret_cast выполняет фундаментальное изменение типа.
Оператор reinterpret_cast
преобразует один тип в принципиально другой. Например, его можно использовать для преобразования указателя в целое значение и целого значения — в указатель. Его также можно использовать для приведения наследственно несовместимых типов указателей. Этот оператор имеет следующий общий формат записи.
reinterpret_cast (expr)
Здесь элемент type
задает новый тип операции приведения, а элемент expr означает выражение, которое приводится к этому новому типу.Использование оператора reinterpret_cast
демонстрируется в следующей программе.
// Пример использования оператора reinterpret_cast.
#include
using namespace std;
int main()
{
int i;
char *p = "Это короткая строка.";
i = reinterpret_cast (p); // Приводим указатель к типу int.