C++/CLI: ТИПЫ ДАННЫХ Кройтор Михаил
Содержание  Типы данных  Примитивные типы данных  Составные типы данных  Ссылочные типы  Типы значений  Перечислимые типы  интерфейсы  Новые свойства классов  Свойства  Делегаты  События
Типы данных  C++/CLI – язык, который позволяет создавать как управляемый, так и неуправляемый код.  Управляемый код располагается в управляемой куче.  Управляемые типы данных унаследованы от типа Object.
Примитивные типы данных Управляемый тип Соответствие Boolean bool Byte unsigned char Char wchar_t Double double Int16 short Int32 long, int Int64 __int64, long long SByte char Single float UInt16 unsigned short UInt32 unsigned int, unsigned long Uint64 unsigned __int64, unsigned long long Void void
Составные типы данных: ссылочные типы  Обладают семантикой ссылок  Переменные хранятся в ссылочной куче  Обращение к переменным осуществляется через дескриптор  Дескриптор в процессе выполнение программы может меняться («уплотнение кучи»)  Выделение памяти – при помощи gcnew  Переменная, не ссылающаяся на память в куче, равна nullptr ref class Man{ String^ name; Byte age; public: Man(): age(0) { name = gcnew String(""); } Man(String^ n, Byte a): age(a) { name = n; } }; Man^ m = gcnew Man(“Henry“, 20);
Составные типы данных: типы значений value struct Point { Int32 x, y; }; Point pt;  Простая структура  Память выделяется в стеке программы  Вычисления более эффективны, чем с ссылочными типами
Составные типы данных: перечислимые типы  Эквивалентен enum из обычного С++  Унаследован от Object  Есть свойство ToString enum class COLOR { BLACK = 0, RED, GREEN, BLUE, WHITE }; COLOR c = COLOR::RED;
Составные типы данных: интерфейсы interface class Shape { void Draw(); void Move(Int32, Int32); }; value struct Point: Shape { Int32 x, y; virtual void Move(Int32 dx, Int32 dy) { x += dx; y += dy; } virtual void Draw(){} };  В С++/CLI нет множественного наследования  Интерфейс – тип данных, объявляющий методы, но не имеющий полей и реализаций методов  Интерфейс эквивалентен абстрактным классам в С++  Управляемый класс может быть унаследован от множества интерфейсов
Новые свойства классов: свойства Свойства (properties)- специальная языковая конструкция, предназначенная для установки/получения значения некоторого поля. ref struct Value { property int x; }; //… ref struct Value { property int x { void set(int v){ this->__x = v; } int get() const { return this->__x; } } private: int __x; };
Новые свойства классов: делегаты delegate void Reshape(); ref struct Shape{ Shape(){} void Draw(){} }; ref struct Point{ property int x; property int y; Reshape^ reshape; Point(){ reshape = gcnew Reshape(gcnew Shape(), &Shape::Draw); } }; int main(){ Point^ p = gcnew Point(); p->reshape(); return 0; }  делегирование – передача управления объектом другому объекту (или функции/функциям)  Объявляется при помощи ключевого слова delegate  Делегаты унаследованы от System::MulticastDelegate  Делегат связывается со списком функций  Добавление в список функций – +=, удаление из списка функций – -=.  Выполнение делегата – Void Invoke();
Новые свойства классов: события  События – один из видов делегатов  объявляются при помощи ключевого слова event  Функции, связываемые с событием, называются обработчиками события  System::EventHandler – базовый тип событий  Базовый вид обработчика событий – Void OnEvent(Object^ sender, EventArgs^ args); ref class Car{ Int32 speed; public: event EventHandler^ lowTemperature; Car(Int32 initSpeed): speed(initSpeed) { lowTemperature += gcnew EventHandler(this, &Car::OnLowTemperature); } Void OnLowTemperature(Object^ sender, EventArgs^ args){ speed = 0; } };
Виртуальные функции  При переопределении виртуальной функции базового класса, после её объявления указывается модификатор override. В этом случае функция прописывается в таблице виртуальных функций  В случае, если виртуальная функция не участвует в механизме полиморфизма, она определяется постфиксным модификатором new

Cpp/cli types

  • 1.
  • 2.
    Содержание  Типы данных Примитивные типы данных  Составные типы данных  Ссылочные типы  Типы значений  Перечислимые типы  интерфейсы  Новые свойства классов  Свойства  Делегаты  События
  • 3.
    Типы данных  C++/CLI– язык, который позволяет создавать как управляемый, так и неуправляемый код.  Управляемый код располагается в управляемой куче.  Управляемые типы данных унаследованы от типа Object.
  • 4.
    Примитивные типы данных Управляемыйтип Соответствие Boolean bool Byte unsigned char Char wchar_t Double double Int16 short Int32 long, int Int64 __int64, long long SByte char Single float UInt16 unsigned short UInt32 unsigned int, unsigned long Uint64 unsigned __int64, unsigned long long Void void
  • 5.
    Составные типы данных: ссылочныетипы  Обладают семантикой ссылок  Переменные хранятся в ссылочной куче  Обращение к переменным осуществляется через дескриптор  Дескриптор в процессе выполнение программы может меняться («уплотнение кучи»)  Выделение памяти – при помощи gcnew  Переменная, не ссылающаяся на память в куче, равна nullptr ref class Man{ String^ name; Byte age; public: Man(): age(0) { name = gcnew String(""); } Man(String^ n, Byte a): age(a) { name = n; } }; Man^ m = gcnew Man(“Henry“, 20);
  • 6.
    Составные типы данных: типызначений value struct Point { Int32 x, y; }; Point pt;  Простая структура  Память выделяется в стеке программы  Вычисления более эффективны, чем с ссылочными типами
  • 7.
    Составные типы данных: перечислимыетипы  Эквивалентен enum из обычного С++  Унаследован от Object  Есть свойство ToString enum class COLOR { BLACK = 0, RED, GREEN, BLUE, WHITE }; COLOR c = COLOR::RED;
  • 8.
    Составные типы данных: интерфейсы interfaceclass Shape { void Draw(); void Move(Int32, Int32); }; value struct Point: Shape { Int32 x, y; virtual void Move(Int32 dx, Int32 dy) { x += dx; y += dy; } virtual void Draw(){} };  В С++/CLI нет множественного наследования  Интерфейс – тип данных, объявляющий методы, но не имеющий полей и реализаций методов  Интерфейс эквивалентен абстрактным классам в С++  Управляемый класс может быть унаследован от множества интерфейсов
  • 9.
    Новые свойства классов: свойства Свойства(properties)- специальная языковая конструкция, предназначенная для установки/получения значения некоторого поля. ref struct Value { property int x; }; //… ref struct Value { property int x { void set(int v){ this->__x = v; } int get() const { return this->__x; } } private: int __x; };
  • 10.
    Новые свойства классов: делегаты delegatevoid Reshape(); ref struct Shape{ Shape(){} void Draw(){} }; ref struct Point{ property int x; property int y; Reshape^ reshape; Point(){ reshape = gcnew Reshape(gcnew Shape(), &Shape::Draw); } }; int main(){ Point^ p = gcnew Point(); p->reshape(); return 0; }  делегирование – передача управления объектом другому объекту (или функции/функциям)  Объявляется при помощи ключевого слова delegate  Делегаты унаследованы от System::MulticastDelegate  Делегат связывается со списком функций  Добавление в список функций – +=, удаление из списка функций – -=.  Выполнение делегата – Void Invoke();
  • 11.
    Новые свойства классов: события События – один из видов делегатов  объявляются при помощи ключевого слова event  Функции, связываемые с событием, называются обработчиками события  System::EventHandler – базовый тип событий  Базовый вид обработчика событий – Void OnEvent(Object^ sender, EventArgs^ args); ref class Car{ Int32 speed; public: event EventHandler^ lowTemperature; Car(Int32 initSpeed): speed(initSpeed) { lowTemperature += gcnew EventHandler(this, &Car::OnLowTemperature); } Void OnLowTemperature(Object^ sender, EventArgs^ args){ speed = 0; } };
  • 12.
    Виртуальные функции  Припереопределении виртуальной функции базового класса, после её объявления указывается модификатор override. В этом случае функция прописывается в таблице виртуальных функций  В случае, если виртуальная функция не участвует в механизме полиморфизма, она определяется постфиксным модификатором new