0.0 particularitatile programarii с++

Embed Size (px)

Text of 0.0 particularitatile programarii с++

++

Particularitile elaborrii aplicaiilor C++Croitor Mihail

CuprinsPointer la funcieMotenireFuncii virtualePolimorfism n baza funciilor virtualeClase abstracteRedefinire operatorilorObiecte funcionaleabloanePolimorfism staticSpecializare abloanelorUnele particulariti ale standardului C++11

Pointer la funciePointer la funcie este un pointer, care conine adresa punctului de ntrare n aceast funcie.Declararea variabilei-pointer la funcie:void (*pfunc)(double*, const size_t);Declararea tipului pointer la funcie:typedef void (*pfunc_t)(double*, const size_t);

Pointer la funcie: exemplu#include typedef void(*event_t)(void*,void*);structButton{ size_tx, y, width, height; chartext[255]; event_t OnClick;};voidButtonPressed(void*/*sender*/,void*/*arg*/){ puts("button pressed!");}intmain(){ Button btn = {5,5,75,30,"Press Me!", ButtonPressed}; btn.OnClick(); return0;}

MotenireMotenirea este un mecanism, care permite descrierea clasei noi (clasa copil, clasa derivat) n baza unei clase existente (clasa de baz, clasa printe) cu pstrarea funcionalitii clasei de baz.

Motenirea permite manipularea cu obiecte de clasa derivata ca cu obiecte clasei de baz.

Pointer la obiectul clasei de baz poate referi la obiectul clasei derivate. Afirmaie invers este greit.

class Base {int value;public:Base(): value(0){}int getValue() { return value; }};

class Derived: public Base{public:Derived() : Base() {}void setValue(int data) { value = data; }};Exemplu motenirii:

Motenire: exempluclass Entity{protected:std::string name;Entity* parent;public:virtual std::string ToString() const = 0;Entity* GetParent() const{ return parent; }};

class Folder: public Entity{std::list childs;public:Folder(std::string n, Entity* p): name(n), parent(p){}std::string ToString() const { return name; }};

Funcii virtualeFuncie virtual a clasei este o metod, care poate fi redefinit n clasa copil i n dependena de situaie se determin n timpul executrii aplicaiei care realizarea concret a funciei va fi apelat.

Polimorfismul n baza funciilor virtuale se numeste polimorfism dinamic. Aceast proprietate printre altele permite invocarea unei i aceleiai funciei (fr redeclararea/redefinirea) cu parametrii actuali de diferite tipuri.class Base{public: Base(): value(0){} virtual void show() { std::cout