MyTetra Share
Делитесь знаниями!
О, смотри-ка какое хорошее место. Дайте два!
Приведение типов в C++. Терминология, динамический полиморфизм
01.04.2016
23:35
Текстовые метки: приведение, типы, C++, термины, cast, upcast, downcast, динамический полиморфизм
Раздел: Компьютер - Программирование - Язык C++

Если происходит приведение типа-наследника к одному из базовых типов, то это называется upcast. При таком приведении использование методов вида static_cast/dynamic_cast не требуется.


Обратное действие, когда происходит приведение базового типа к типу-наследнику, называется downcast. При таком приведении явный вызов методов ***_cast обязателен.


При downcast вопрос только в том, какой каст применить. Быстрее - static_cast, но программист должен точно знать, что указатель/ссылка указывает на объект конкретного типа. Если программист ошибется - в рантайме может произойти все, что угодно. Если же программист не может знать, на что указывает указатель (например, метод возвращает объекты разных производных типов) - придется использовать dynamic_cast, но он работает медленнее, ибо использует механизм RTTI.


Пример кода:


QAbstractItemModel *base; // Объект класса QAbstractItemModel

TreeModel *child = new TreeModel; // Объект класса, унаследованного от QAbstractItemModel


// Upcast

base = child; // так можно (ибо child содержит все данные для base и даже больше)


// Downcast

child = base; // так без преобразования нельзя (base не имеет всех данных для child)


Так же в этом разделе:
← Содержание ...
 
MyTetra Share v.0.35
Яндекс индекс цитирования