SlideShare a Scribd company logo
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

More Related Content

What's hot

C++ Базовый. Занятие 03.
C++ Базовый. Занятие 03.C++ Базовый. Занятие 03.
C++ Базовый. Занятие 03.
Igor Shkulipa
 
Подпрограммы
ПодпрограммыПодпрограммы
Подпрограммы
Colegiul de Industrie Usoara
 
C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.
Igor Shkulipa
 
4.2 Перегрузка
4.2 Перегрузка4.2 Перегрузка
4.2 Перегрузка
DEVTYPE
 
5.4 Ключевые слова static и inline
5.4 Ключевые слова static и inline5.4 Ключевые слова static и inline
5.4 Ключевые слова static и inline
DEVTYPE
 
Евгений Зуев, С++ в России: Стандарт языка и его реализация
Евгений Зуев, С++ в России: Стандарт языка и его реализацияЕвгений Зуев, С++ в России: Стандарт языка и его реализация
Евгений Зуев, С++ в России: Стандарт языка и его реализация
Platonov Sergey
 
C++ осень 2012 лекция 9
C++ осень 2012 лекция 9C++ осень 2012 лекция 9
C++ осень 2012 лекция 9Technopark
 
3.3 Конструкторы и деструкторы
3.3 Конструкторы и деструкторы3.3 Конструкторы и деструкторы
3.3 Конструкторы и деструкторы
DEVTYPE
 
Язык программирования C#
Язык программирования C#Язык программирования C#
Язык программирования C#
Dmitri Soshnikov
 
Roslyn API : SyntaxTree vs CodeDom, SemanticModel vs Reflection
Roslyn API: SyntaxTree vs CodeDom, SemanticModel vs ReflectionRoslyn API: SyntaxTree vs CodeDom, SemanticModel vs Reflection
Roslyn API : SyntaxTree vs CodeDom, SemanticModel vs Reflection
Denis Tsvettsih
 
2.2 Стек вызовов
2.2 Стек вызовов2.2 Стек вызовов
2.2 Стек вызовов
DEVTYPE
 
5.1 Перегрузка операторов
5.1 Перегрузка операторов5.1 Перегрузка операторов
5.1 Перегрузка операторов
DEVTYPE
 
C++ осень 2013 лекция 2
C++ осень 2013 лекция 2C++ осень 2013 лекция 2
C++ осень 2013 лекция 2Technopark
 
3.1 Структуры
3.1 Структуры3.1 Структуры
3.1 Структуры
DEVTYPE
 
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
corehard_by
 
C++ осень 2013 лекция 4
C++ осень 2013 лекция 4C++ осень 2013 лекция 4
C++ осень 2013 лекция 4Technopark
 
C++ Базовый. Занятие 01.
C++ Базовый. Занятие 01.C++ Базовый. Занятие 01.
C++ Базовый. Занятие 01.
Igor Shkulipa
 
C++ осень 2013 лекция 6
C++ осень 2013 лекция 6C++ осень 2013 лекция 6
C++ осень 2013 лекция 6Technopark
 
C++ осень 2013 лекция 9
C++ осень 2013 лекция 9C++ осень 2013 лекция 9
C++ осень 2013 лекция 9Technopark
 
Программирование на языке C Sharp (СИ решетка)
Программирование на языке C Sharp (СИ решетка)Программирование на языке C Sharp (СИ решетка)
Программирование на языке C Sharp (СИ решетка)
Alexandr Konfidentsialno
 

What's hot (20)

C++ Базовый. Занятие 03.
C++ Базовый. Занятие 03.C++ Базовый. Занятие 03.
C++ Базовый. Занятие 03.
 
Подпрограммы
ПодпрограммыПодпрограммы
Подпрограммы
 
C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.
 
4.2 Перегрузка
4.2 Перегрузка4.2 Перегрузка
4.2 Перегрузка
 
5.4 Ключевые слова static и inline
5.4 Ключевые слова static и inline5.4 Ключевые слова static и inline
5.4 Ключевые слова static и inline
 
Евгений Зуев, С++ в России: Стандарт языка и его реализация
Евгений Зуев, С++ в России: Стандарт языка и его реализацияЕвгений Зуев, С++ в России: Стандарт языка и его реализация
Евгений Зуев, С++ в России: Стандарт языка и его реализация
 
C++ осень 2012 лекция 9
C++ осень 2012 лекция 9C++ осень 2012 лекция 9
C++ осень 2012 лекция 9
 
3.3 Конструкторы и деструкторы
3.3 Конструкторы и деструкторы3.3 Конструкторы и деструкторы
3.3 Конструкторы и деструкторы
 
Язык программирования C#
Язык программирования C#Язык программирования C#
Язык программирования C#
 
Roslyn API : SyntaxTree vs CodeDom, SemanticModel vs Reflection
Roslyn API: SyntaxTree vs CodeDom, SemanticModel vs ReflectionRoslyn API: SyntaxTree vs CodeDom, SemanticModel vs Reflection
Roslyn API : SyntaxTree vs CodeDom, SemanticModel vs Reflection
 
2.2 Стек вызовов
2.2 Стек вызовов2.2 Стек вызовов
2.2 Стек вызовов
 
5.1 Перегрузка операторов
5.1 Перегрузка операторов5.1 Перегрузка операторов
5.1 Перегрузка операторов
 
C++ осень 2013 лекция 2
C++ осень 2013 лекция 2C++ осень 2013 лекция 2
C++ осень 2013 лекция 2
 
3.1 Структуры
3.1 Структуры3.1 Структуры
3.1 Структуры
 
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...
 
C++ осень 2013 лекция 4
C++ осень 2013 лекция 4C++ осень 2013 лекция 4
C++ осень 2013 лекция 4
 
C++ Базовый. Занятие 01.
C++ Базовый. Занятие 01.C++ Базовый. Занятие 01.
C++ Базовый. Занятие 01.
 
C++ осень 2013 лекция 6
C++ осень 2013 лекция 6C++ осень 2013 лекция 6
C++ осень 2013 лекция 6
 
C++ осень 2013 лекция 9
C++ осень 2013 лекция 9C++ осень 2013 лекция 9
C++ осень 2013 лекция 9
 
Программирование на языке C Sharp (СИ решетка)
Программирование на языке C Sharp (СИ решетка)Программирование на языке C Sharp (СИ решетка)
Программирование на языке C Sharp (СИ решетка)
 

Viewers also liked

Языки программирования
Языки программированияЯзыки программирования
Языки программированияpaulsmirnov
 
Язык программирования Pascal
Язык программирования PascalЯзык программирования Pascal
Язык программирования Pascal
School 242
 
C++ осень 2013 лекция 1
C++ осень 2013 лекция 1C++ осень 2013 лекция 1
C++ осень 2013 лекция 1Technopark
 
2.6 Динамическая память
2.6 Динамическая память2.6 Динамическая память
2.6 Динамическая память
DEVTYPE
 
4.5 Объектно-ориентированное программирование
4.5 Объектно-ориентированное программирование4.5 Объектно-ориентированное программирование
4.5 Объектно-ориентированное программирование
DEVTYPE
 
3.4 Объекты и классы
3.4 Объекты и классы3.4 Объекты и классы
3.4 Объекты и классы
DEVTYPE
 
3.2 Методы
3.2 Методы3.2 Методы
3.2 Методы
DEVTYPE
 
2.3 Указатели и массивы
2.3 Указатели и массивы2.3 Указатели и массивы
2.3 Указатели и массивы
DEVTYPE
 
6.2 Шаблоны функций
6.2 Шаблоны функций6.2 Шаблоны функций
6.2 Шаблоны функций
DEVTYPE
 
6.3 Специализация шаблонов
6.3 Специализация шаблонов6.3 Специализация шаблонов
6.3 Специализация шаблонов
DEVTYPE
 

Viewers also liked (11)

C# vs C++
C# vs C++C# vs C++
C# vs C++
 
Языки программирования
Языки программированияЯзыки программирования
Языки программирования
 
Язык программирования Pascal
Язык программирования PascalЯзык программирования Pascal
Язык программирования Pascal
 
C++ осень 2013 лекция 1
C++ осень 2013 лекция 1C++ осень 2013 лекция 1
C++ осень 2013 лекция 1
 
2.6 Динамическая память
2.6 Динамическая память2.6 Динамическая память
2.6 Динамическая память
 
4.5 Объектно-ориентированное программирование
4.5 Объектно-ориентированное программирование4.5 Объектно-ориентированное программирование
4.5 Объектно-ориентированное программирование
 
3.4 Объекты и классы
3.4 Объекты и классы3.4 Объекты и классы
3.4 Объекты и классы
 
3.2 Методы
3.2 Методы3.2 Методы
3.2 Методы
 
2.3 Указатели и массивы
2.3 Указатели и массивы2.3 Указатели и массивы
2.3 Указатели и массивы
 
6.2 Шаблоны функций
6.2 Шаблоны функций6.2 Шаблоны функций
6.2 Шаблоны функций
 
6.3 Специализация шаблонов
6.3 Специализация шаблонов6.3 Специализация шаблонов
6.3 Специализация шаблонов
 

Similar to Cpp/cli types

Типы данных
Типы данныхТипы данных
Типы данных
MonsterXX
 
C++ осень 2012 лекция 6
C++ осень 2012 лекция 6C++ осень 2012 лекция 6
C++ осень 2012 лекция 6Technopark
 
C++ осень 2013 лекция 3
C++ осень 2013 лекция 3C++ осень 2013 лекция 3
C++ осень 2013 лекция 3Technopark
 
Делегаты
ДелегатыДелегаты
ДелегатыREX-MDK
 
NetworkUA - 2012 - Introduction TypeScript
NetworkUA - 2012 - Introduction TypeScript NetworkUA - 2012 - Introduction TypeScript
NetworkUA - 2012 - Introduction TypeScript Dmytro Mindra
 
презентация кметодическим указаниям к лаб. работам
презентация кметодическим указаниям к лаб. работампрезентация кметодическим указаниям к лаб. работам
презентация кметодическим указаниям к лаб. работамstudent_kai
 
Ciklum .NET Saturday - Introduction to TypeScript
Ciklum .NET Saturday - Introduction to TypeScriptCiklum .NET Saturday - Introduction to TypeScript
Ciklum .NET Saturday - Introduction to TypeScriptDmytro Mindra
 
C++ весна 2014 лекция 5
C++ весна 2014 лекция 5C++ весна 2014 лекция 5
C++ весна 2014 лекция 5Technopark
 
C++ осень 2013 лекция 7
C++ осень 2013 лекция 7C++ осень 2013 лекция 7
C++ осень 2013 лекция 7Technopark
 
Лекция 1. Основы объектно-ориентированного программирования
Лекция 1. Основы объектно-ориентированного программированияЛекция 1. Основы объектно-ориентированного программирования
Лекция 1. Основы объектно-ориентированного программирования
Виталий Емельянов
 
C# Desktop. Занятие 02.
C# Desktop. Занятие 02.C# Desktop. Занятие 02.
C# Desktop. Занятие 02.
Igor Shkulipa
 
spolzovatelskie-strukturirovannye-tipy-dannyh.pptx
spolzovatelskie-strukturirovannye-tipy-dannyh.pptxspolzovatelskie-strukturirovannye-tipy-dannyh.pptx
spolzovatelskie-strukturirovannye-tipy-dannyh.pptx
yanabondarieva
 
C# 3.0
C# 3.0C# 3.0
лекция 4
лекция 4лекция 4
лекция 4
лекция 4лекция 4
лабораторная работа №4
лабораторная работа №4лабораторная работа №4
лабораторная работа №4Zhanna Kazakova
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Javametaform
 

Similar to Cpp/cli types (20)

Типы данных
Типы данныхТипы данных
Типы данных
 
C++ осень 2012 лекция 6
C++ осень 2012 лекция 6C++ осень 2012 лекция 6
C++ осень 2012 лекция 6
 
C++ осень 2013 лекция 3
C++ осень 2013 лекция 3C++ осень 2013 лекция 3
C++ осень 2013 лекция 3
 
Делегаты
ДелегатыДелегаты
Делегаты
 
NetworkUA - 2012 - Introduction TypeScript
NetworkUA - 2012 - Introduction TypeScript NetworkUA - 2012 - Introduction TypeScript
NetworkUA - 2012 - Introduction TypeScript
 
презентация кметодическим указаниям к лаб. работам
презентация кметодическим указаниям к лаб. работампрезентация кметодическим указаниям к лаб. работам
презентация кметодическим указаниям к лаб. работам
 
Ciklum .NET Saturday - Introduction to TypeScript
Ciklum .NET Saturday - Introduction to TypeScriptCiklum .NET Saturday - Introduction to TypeScript
Ciklum .NET Saturday - Introduction to TypeScript
 
C++ весна 2014 лекция 5
C++ весна 2014 лекция 5C++ весна 2014 лекция 5
C++ весна 2014 лекция 5
 
C++ осень 2013 лекция 7
C++ осень 2013 лекция 7C++ осень 2013 лекция 7
C++ осень 2013 лекция 7
 
Лекция 1. Основы объектно-ориентированного программирования
Лекция 1. Основы объектно-ориентированного программированияЛекция 1. Основы объектно-ориентированного программирования
Лекция 1. Основы объектно-ориентированного программирования
 
C# Desktop. Занятие 02.
C# Desktop. Занятие 02.C# Desktop. Занятие 02.
C# Desktop. Занятие 02.
 
Rgsu04
Rgsu04Rgsu04
Rgsu04
 
Rgsu04
Rgsu04Rgsu04
Rgsu04
 
spolzovatelskie-strukturirovannye-tipy-dannyh.pptx
spolzovatelskie-strukturirovannye-tipy-dannyh.pptxspolzovatelskie-strukturirovannye-tipy-dannyh.pptx
spolzovatelskie-strukturirovannye-tipy-dannyh.pptx
 
C# 3.0
C# 3.0C# 3.0
C# 3.0
 
лекция 4
лекция 4лекция 4
лекция 4
 
лекция 4
лекция 4лекция 4
лекция 4
 
лабораторная работа №4
лабораторная работа №4лабораторная работа №4
лабораторная работа №4
 
Bytecode
BytecodeBytecode
Bytecode
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Java
 

More from mcroitor

09 server mgmt_ii_ro
09 server mgmt_ii_ro09 server mgmt_ii_ro
09 server mgmt_ii_ro
mcroitor
 
09 server mgmt_ii_ru
09 server mgmt_ii_ru09 server mgmt_ii_ru
09 server mgmt_ii_ru
mcroitor
 
10 server security_ro
10 server security_ro10 server security_ro
10 server security_ro
mcroitor
 
10 server security_ru
10 server security_ru10 server security_ru
10 server security_ru
mcroitor
 
08 server mgmt_ro
08 server mgmt_ro08 server mgmt_ro
08 server mgmt_ro
mcroitor
 
08 server mgmt_ru
08 server mgmt_ru08 server mgmt_ru
08 server mgmt_ru
mcroitor
 
07 virtual hosts_ru
07 virtual hosts_ru07 virtual hosts_ru
07 virtual hosts_ru
mcroitor
 
07 virtual hosts_ro
07 virtual hosts_ro07 virtual hosts_ro
07 virtual hosts_ro
mcroitor
 
06 php instalation_ro
06 php instalation_ro06 php instalation_ro
06 php instalation_ro
mcroitor
 
06 php instalation_ru
06 php instalation_ru06 php instalation_ru
06 php instalation_ru
mcroitor
 
05 db server_deployment_ro
05 db server_deployment_ro05 db server_deployment_ro
05 db server_deployment_ro
mcroitor
 
05 db server_deployment_ru
05 db server_deployment_ru05 db server_deployment_ru
05 db server_deployment_ru
mcroitor
 
04 web server_deployment_ro
04 web server_deployment_ro04 web server_deployment_ro
04 web server_deployment_ro
mcroitor
 
04 web server_deployment_ru
04 web server_deployment_ru04 web server_deployment_ru
04 web server_deployment_ru
mcroitor
 
03 web server_architecture_ro
03 web server_architecture_ro03 web server_architecture_ro
03 web server_architecture_ro
mcroitor
 
03 web server_architecture_ru
03 web server_architecture_ru03 web server_architecture_ru
03 web server_architecture_ru
mcroitor
 
02 server hardware_ro
02 server hardware_ro02 server hardware_ro
02 server hardware_ro
mcroitor
 
02 server hardware_ru
02 server hardware_ru02 server hardware_ru
02 server hardware_ru
mcroitor
 
01 server definition_ro
01 server definition_ro01 server definition_ro
01 server definition_ro
mcroitor
 
01 server definition
01 server definition01 server definition
01 server definition
mcroitor
 

More from mcroitor (20)

09 server mgmt_ii_ro
09 server mgmt_ii_ro09 server mgmt_ii_ro
09 server mgmt_ii_ro
 
09 server mgmt_ii_ru
09 server mgmt_ii_ru09 server mgmt_ii_ru
09 server mgmt_ii_ru
 
10 server security_ro
10 server security_ro10 server security_ro
10 server security_ro
 
10 server security_ru
10 server security_ru10 server security_ru
10 server security_ru
 
08 server mgmt_ro
08 server mgmt_ro08 server mgmt_ro
08 server mgmt_ro
 
08 server mgmt_ru
08 server mgmt_ru08 server mgmt_ru
08 server mgmt_ru
 
07 virtual hosts_ru
07 virtual hosts_ru07 virtual hosts_ru
07 virtual hosts_ru
 
07 virtual hosts_ro
07 virtual hosts_ro07 virtual hosts_ro
07 virtual hosts_ro
 
06 php instalation_ro
06 php instalation_ro06 php instalation_ro
06 php instalation_ro
 
06 php instalation_ru
06 php instalation_ru06 php instalation_ru
06 php instalation_ru
 
05 db server_deployment_ro
05 db server_deployment_ro05 db server_deployment_ro
05 db server_deployment_ro
 
05 db server_deployment_ru
05 db server_deployment_ru05 db server_deployment_ru
05 db server_deployment_ru
 
04 web server_deployment_ro
04 web server_deployment_ro04 web server_deployment_ro
04 web server_deployment_ro
 
04 web server_deployment_ru
04 web server_deployment_ru04 web server_deployment_ru
04 web server_deployment_ru
 
03 web server_architecture_ro
03 web server_architecture_ro03 web server_architecture_ro
03 web server_architecture_ro
 
03 web server_architecture_ru
03 web server_architecture_ru03 web server_architecture_ru
03 web server_architecture_ru
 
02 server hardware_ro
02 server hardware_ro02 server hardware_ro
02 server hardware_ro
 
02 server hardware_ru
02 server hardware_ru02 server hardware_ru
02 server hardware_ru
 
01 server definition_ro
01 server definition_ro01 server definition_ro
01 server definition_ro
 
01 server definition
01 server definition01 server definition
01 server definition
 

Cpp/cli types

  • 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. Составные типы данных: интерфейсы 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 нет множественного наследования  Интерфейс – тип данных, объявляющий методы, но не имеющий полей и реализаций методов  Интерфейс эквивалентен абстрактным классам в С++  Управляемый класс может быть унаследован от множества интерфейсов
  • 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. Новые свойства классов: делегаты 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();
  • 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