c++/cli: tipuri de date

13
C++/CLI: TIPURI DE DATE Mihail Croitor

Upload: mcroitor

Post on 15-Jun-2015

287 views

Category:

Education


7 download

DESCRIPTION

Tipuri de date gestionabile în C++/CLI și proprietățile noi ăn descrierea claselor

TRANSCRIPT

Page 1: C++/CLI: TIpuri de date

C++/CLI: TIPURI DE DATE

Mihail Croitor

Page 2: C++/CLI: TIpuri de date

Cuprins

Tipuri de date Tipuri de date primitive Tipuri de date compuse

Tip-referința Tip-valoare Tip enumerabil Interfețe

Proprietăți noi a claselor Proprietăți Delegați Evenimente

Funcții virtuale

Page 3: C++/CLI: TIpuri de date

Tipuri de date

C++/CLI este un limbaj care permite crearea codului gestionabil și negestionabil.

Tipurile gestionabile se plasează în memoria gestionabilă.

Fiecare tip gestionabil este moștenit de la clasa Object.

Există tipuri de date gestionabile primitive(sau simple) si compuse.

Page 4: C++/CLI: TIpuri de date

Tipuri de date primitive

Tip gestionabil echivalentul

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

Page 5: C++/CLI: TIpuri de date

Tipuri de date compuse:Tip referință

are semantica referințelor se păstrează in memoria tipurilor

de referință (reference heap) Acces la valori variabilelor se

realizează prin descriptor (^) Descriptorul poate schimba

valoarea sa în timpul executării aplicației («compactare memoriei tipurilor de referință»)

Memoria se alocă cu ajutorul operatorului gcnew

Dacă variabilă nu este legată cu memoria tipurilor de referință, atunci ea primește valoare 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);

Page 6: C++/CLI: TIpuri de date

Tipuri de date compuse:Tip valoare

value struct Point

{

Int32 x, y;

};

Point pt;

Sunt structuri simple Memoria pentru acest tip se

alocă în stiva programului. Efectuarea operațiilor cu

tipuri valoare sunt mai efective decât cu cele de tip referință.

Page 7: C++/CLI: TIpuri de date

Tipuri de date compuse:tip numărabil

Este echivalent tipului enum din С++ standard

Este moștenit de la Object

Are proprietate ToString

enum class COLOR

{

BLACK = 0,

RED, GREEN,

BLUE, WHITE

};

COLOR c = COLOR::RED;

Page 8: C++/CLI: TIpuri de date

Tipuri de date compuse:interfețe

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(){}

};

În C++/CLI nu există moștenire multiplă

Interfața - tip de date ce declară metode, dar nu au câmpuri și realizări de metode

Interfața este un tip echivalent claselor abstracte din C++

Clasa gestionabilă poate fi moștenită de la mai multe interfețe.

Page 9: C++/CLI: TIpuri de date

Proprietăți noi a claselor:proprietăți

Proprietăți(properties) este o construcție specială a limbajului destinată pentru setarea/extragerea valorii unui câmp.

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;

};

Page 10: C++/CLI: TIpuri de date

Proprietăți noi a claselor:delegare

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;}

Delegare este transmiterea dreptului de a acționa altui obiect sau funcției

Se declară cu ajutorul cuvântului cheie delegate

Delegate sunt moștenite de la clasa System::MulticastDelegate

Delegat poate fi legat cu o lista de funcții

Adăugarea funcțiilor în lista se face prin +=, eliminarea funcției din lista – -=.

Executarea delegatului – Void Invoke();

Page 11: C++/CLI: TIpuri de date

Proprietăți noi a claselor:evenimente

Evenimentele se reprezintă prin delegații

se definesc cu ajutorul cuvântului-cheie event

Funcții legate cu eveniment se numesc prelucrători evenimentului

Tip de baza a evenimentului este System::EventHandler

Reprezentare obișnuită prelucrătorului evenimentului este 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;

}

};

Page 12: C++/CLI: TIpuri de date

Funcții virtuale

Dacă funcția virtuală redefinește funcția clasului de bază, atunci după declararea funcției se adaugă modificatorul override. În acest caz funcția se înregistrează în tabelul funcțiilor virtuale

În caz dacă funcția virtuală nu participă în mecanismul polimorfismului, după declararea funcției se adaugă modificatorul new

Page 13: C++/CLI: TIpuri de date

Întrebări?

Mulțumesc pentru atenție!