Поделиться через


Приведение

Если класс является производным от базового класса, содержащего виртуальные функции, то в языке C++ указатель на такой тип базового класса можно использовать для вызова реализаций виртуальных функций, находящихся в объекте производного класса. Класс, содержащий виртуальные функции, иногда называется "полиморфным".

Поскольку производный класс содержит определения всех базовых классов, от которых он является производным, можно безопасно привести указатель с повышением по иерархии классов к любому из этих базовых классов. Для указателя на базовый класс можно безопасно выполнить приведение с понижением по иерархии. Эта операция безопасна, если объект, на который осуществляется указание, фактически имеет тип, производный от базового класса. В этом случае фактический объект, как говорят, является "полным объектом". Указатель на базовый класс, как сообщается, указывает на "подобъект" полного объекта. Например, рассмотрим иерархию классов, показанную на следующем рисунке.

Diagram of a class hierarchy where C derives from B, which derives from A.
Иерархия классов

Объект типа C может быть визуализирован, как показано на следующем рисунке.

Diagram of Class C with subobjects B and A.
Класс C с подобъектами B и A

Для экземпляра класса C имеются подчиненный объект B и подчиненный объект A. Экземпляр C, содержащий подчиненные объекты A и B, является "полным объектом".

Используя информацию о типах во время выполнения, можно проверить, указывает ли указатель на полный объект и можно ли безопасно выполнить приведение этого указателя, чтобы он указывал на другой объект в своей иерархии. Оператор dynamic_cast можно использовать для создания этих типов приведения. Данный оператор также выполняет проверку во время выполнения, чтобы сделать эту операцию безопасной.

Для преобразования неполиморфных типов можно использовать оператор static_cast (в этом разделе объясняется различие между статическими и динамическими преобразованиями приведения, а также при необходимости их использования).

В этом разделе описываются следующие темы:

См. также

Выражения