Оператор dynamic_cast

На прошлом уроке мы рассмотрели static_cast и сказали, что он не выполняет динамический контроль типов. Так вот, для безопасного приведения типов необходимо использовать dynamic_cast, так как контроль преобразования происходит на этапе выполнения программы. В случае успешного преобразования dynamic_cast возвращает ненулевой указатель. Рассмотрим пример.


#include <iostream>
using namespace std;

class Base
{
public:

Base()
{
}

virtual ~Base()
{
}

void info()
{
  cout << "Base::info()\n\n"<<endl;
}

};

class Derived: public Base
{
public:

Derived()
{
}

~Derived()
{
}

void info()
{
  cout << "Derived::info()\n\n";
}

};

void main()
{
 Base* base = new Derived();
 base->info();

 Derived *derived;
 derived = dynamic_cast<Derived*>(base);

  if(derived)
 derived->info();

 delete base;
}


В первом случае мы получим: Base::info(), т.к. вызывается метод info() класса Base. Во втором случае: Derived::info(), т.к. мы успешно преобразовали указатель base к типу Derived*.

На этом уроке мы кратко рассмотрели оператор dynamic_cast, который обеспечивает приведение типов в динамическом режиме. Нам еще осталось рассмотреть операторы reinterpret_cast и const_cast, но об этом в следующем уроке.

Комментарии и пинги к записи запрещены.

Комментарии закрыты.

Яндекс.Метрика