Динамічна ідентифікація типуДинамічна ідентифікація типу (англ. Run-Time Type Identificator, RTTI) — механізм мов програмування, що дозволяє ідентифікувати тип об'єкта у процесі виконання програми. Функціональність у С++Був доданий у мову С++ для підтримки об'єктно-орієнтованого програмування та динамічного поліморфізму. Додаткові оператори приведення типів забезпечують безпечніший спосіб приведення. Цей механізм не був включений в початкову версію мови С++. RTTI був доданий згодом, у зв'язку з існуванням низки однотипних механізмів, що часто призводило до конфлікту версій бібліотек. Для ідентифікації типу в С++ використовується оператор typeid визначений в заголовковому файлі <typeinfo>, або оператор dynamic_cast. Синтаксис оператора typeidНайчастіше він використовується так: typeid (object); Тут object – об'єкт, тип якого ми хочемо ідентифікувати. Оператор typeid повертає вказівник на об'єкт типу type_info, який описує тип об'єкта. Клас type_info містить такі функції-члени: bool operator == (const type_info& ob); Перевантажені оператори “!=” і “==” дозволяють порівнювати типи. Оператор before повертає значення true, коли викликаючий об'єкт є предком об'єкта, використаного як параметр. Функція name() повертає вказівник на назву даного типу. Синтаксис оператора dynamic_castОсновна стаття: Dynamic cast dynamic_cast<newType> (expression); newType - вказівник, або посилання на існуючий тип, або void-вказівник. expression - операнд, який приводиться до типу newType Прикладclass A {virtual void f();}; class B {virtual void f();}; DelphiКомпілятор Delphi зберігає в вихідному файлі програми інформацію про всі класи, які використовуються в ній. При створенні будь-якого об'єкта в пам'яті перед ним створюється заголовок, в якому є вказівник на клас цього об'єкта. Оператор Заголовки об'єктів — також неявно — використовуються для автоматичного керування пам'яттю. C#В C# для визначення типу об'єкта під час виконання використовується метод JavaВ Java тип об'єкта може бути одержаним за допомогою методу На рівні байт-коду виклику методу клас записується, як і виклик будь-якого іншого методу, за допомогою опкоду invokevirtual. Для перевірки можливості приведення об'єкта до типу використовуються опкоди instanceof и checkcast. PerlВ Perl тип об'єкта може бути ідентифікованим за допомогою функції blessed(), яка є частиною CPAN-модуля Scalar::Util. Функція приймає вказівник на об'єкт (blessed hash чи аналог) і повертає скаляр, який зберігає ім'я класу. Джерела
|
Portal di Ensiklopedia Dunia