Предефиниране на оператори. Копиращ конструктор. Оператор за присвояване Любомир Чорбаджиев Технологическо училище Електронни системи Технически униве

Размер: px
Започни от страница:

Download "Предефиниране на оператори. Копиращ конструктор. Оператор за присвояване Любомир Чорбаджиев Технологическо училище Електронни системи Технически униве"

Препис

1 Предефиниране на оператори. Копиращ конструктор. Оператор за присвояване Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София Revision : февруари 2005 г. Пример: Операции с вектори Основните операции, които могат да се извършват с вектори, са събиране, изваждане и умножение по число. Нека разгледаме вектори, дефинирани в равнината. Всеки вектор може да се представи като двойка числа a = (a x, a y ), където a x и a y са съответно x и y-координатата на вектора a. 1

2 Пример: Операции с вектори Нека са дадени два вектора a = (a x, a y ) и b = (b x, b y ). Операцията събиране на вектори дава нов вектор c = (c x, c y ), такъв че: c x = a x + b x, c y = a y + b y Нека са дадени два вектора a = (a x, a y ) и b = (b x, b y ). Операцията изваждане на вектори дава нов вектор c = (c x, c y ), такъв че: c x = a x b x, c y = a y b y Нека се дадени вектор a = (a x, a y ) и число α. Операцията умножение на вектор по число дава нов вектор b = (b x, b y ), такъв че: b x = αa x, b y = αa y 2 Пример: Операции с вектори Нека дефинираме клас Point, който представя вектор в равнината. 4 class Point { 5 double x_, y_; 6 public : 7 Point (double x =0,double y =0) 8 : x_(x), y_(y) 9 {} 10 double get_x () const { return x_ ;} 11 double get_y () const { return y_ ;} Point & add (const Point & p); 14 Point & sub (const Point & p); 15 Point & mul (double a); 16 }; 3

3 Пример: Операции с вектори Методът Point& add(const Point& p) реализира операцията събиране на вектори. 18 Point & Point :: add (const Point & p ) { 19 x_ +=p.x_; 20 y_ +=p.y_; 21 return * this ; 22 } Нека са дадени два вектора p 1 и p 2. Операцията p 1 = p 1 + p 2 може да се изпълни по следният начин: Point p1, p2; //... p1. add (p2 ); 4 Пример: Операции с вектори Методът Point& sub(const Point& p) реализира операцията изваждане на вектори. 23 Point & Point :: sub (const Point & p ) { 24 x_ -=p.x_; 25 y_ -=p.y_; 26 return * this ; 27 } Нека са дадени два вектора p 1 и p 2. Операцията p 1 = p 1 p 2 може да се изпълни по следният начин: Point p1, p2; //... p1. sub (p2 ); 5

4 Пример: Операции с вектори Методът Point& mul(double alpha) реализира операцията умножение на вектор по число. 28 Point & Point :: mul (double alpha ) { 29 x_ *= alpha ; 30 y_ *= alpha ; 31 return * this ; 32 } Нека е даден вектор p и числото α. Операцията p = α p може да се изпълни по следният начин: Point p; double alpha ; //... p. mul ( alpha ); Пример: Операции с вектори 6 И трите разгледани метода връщат препратка към Point, като тази препратка препраща към обекта, върху който се изпълнява операцията (*this). 18 Point & Point :: add (const Point & p ) { 19 x_ +=p.x_; 20 y_ +=p.y_; 21 return * this ; 22 } Това позволява тези операции да се прилагат последователно върху даден обект: 1 Point p1, p2, p3; 2 //... 3 p1. add (p2 ). sub (p3 ). mul (10.0); Ред 3 е еквивалентен на следният код: 1 p1. add (p2 ); 2 p1. sub (p3 ); 3 p1. mul (10.0); 7

5 Пример: Операции с вектори 1 #include < iostream > 2 using namespace std ; 3 4 class Point { 5 double x_, y_; 6 public : 7 Point (double x =0,double y =0) 8 : x_(x), y_(y) 9 {} 10 double get_x () const { return x_ ;} 11 double get_y () const { return y_ ;} Point & add (const Point & p); 14 Point & sub (const Point & p); 15 Point & mul (double a ); 16 }; Point & Point :: add (const Point & p ) { 19 x_ +=p.x_; 20 y_ +=p.y_; 21 return * this ; 22 } 23 Point & Point :: sub (const Point & p ) { 24 x_ -=p.x_; 25 y_ -=p.y_; 26 return * this ; 27 } 28 Point & Point :: mul (double alpha ) { 29 x_ *= alpha ; 30 y_ *= alpha ; 31 return * this ; 32 } 33

6 34 int main (void ) { 35 Point p1 (1.0,1.0); 36 Point p2 (2.0,2.0); 37 Point p3 (3.0,3.0); p3.add (p2 ). sub (p1 ). mul (10.0); cout <<"p3 =(" 42 <<p3. get_x ()<<", " 43 <<p3. get_y ()<<")" << endl ; 44 return 0; 45 } lubo@kid:~/school/notes>./a.out p3=(40, 40) Предефиниране на оператори Представената реализация на векторна аритметика е удобна, но щеше да бъде много по удобна, ако можехме да използваме естествените математически оператори +, -, *, +=, -=, *=. Например: 1 Point p1, p2, p3; 2 //... 3 p1= p2+ p3; 4 p1 *=10.0; 5 p3 -= p3; Една от важните концепции при създаването на езика C++ е, че класовете, трябва да бъдат равноправни на вградените (примитивни) типове. 9

7 Предефиниране на оператори В езика C++ е предвидена възможност операторите да бъдат дефинирана за потребителските типове. Има само няколко оператора, които не могат да се предефинират от потребителя: :: оператор за избор на област на видимост;. оператор за избор на член;.* оператор за избор на член чрез указател към член; sizeof оператор за размер на обект; typeid оператор за идентификация на типа;?: оператора за условен избор; Всички останали оператори могат да се предефинират. 10 Бинарни и унарни оператори Бинарен оператор се нарича оператор, който действа върху два аргумента. Унарен е оператор, който действа върху един аргумент. Примери за бинарни оператори са операторите + (a+b), * (a*b), - (a-b), / (a/b) и т.н. Примери за унарни оператори са операторите - (-a),! (!a), ~ (~a), ++ (a++) и т.н. Вида на оператора определя начина, по който той може да бъде предефиниран. 11

8 Бинарни оператори Бинарните оператори могат да се дефинират по два начина: Като нестатична член-функция на класа, която приема един аргумент например: Point Point :: operator+(const Point & p) Като функция, която не е член на класа и приема два аргумента например: Point operator+(const Point & p1, const Point & p2) 12 Бинарни оператори Нека разгледаме първият вариант за предефиниране на бинарен оператор. За пример ще използваме класът Point и бинарният оператор за събиране: 1 #include < iostream > 2 using namespace std ; 3 4 class Point { 5 double x_, y_; 6 public : 7 Point (double x =0,double y =0) 8 : x_(x), y_(y) 9 {} 10 double get_x () const { return x_ ;} 11 double get_y () const { return y_ ;} 12 Point operator+(const Point & p) const; 13 }; 13

9 14 Point Point :: operator+(const Point & p) const { 15 Point result ( get_x ()+ p. get_x (), get_y ()+ p. get_y ()); 16 return result ; 17 } 18 int main (void ) { 19 Point p1 (1.0,1.0), p2 (2.0,2.0), p3; p3=p1+p2; 22 cout <<"p3 =(" 23 <<p3. get_x ()<<", " 24 <<p3. get_y ()<<")" << endl ; 25 return 0; 26 } lubo@kid:~/school/notes>./a.out p3=(3, 3) Изразът в ред 21 е еквивалентен на следното: p3= p1.operator+( p2 ); Бинарни оператори Нека разгледаме вторият вариант за предефиниране на бинарен оператор. Като пример отново използваме класът Point: 1 #include < iostream > 2 using namespace std ; 3 4 class Point { 5 double x_, y_; 6 public : 7 Point (double x =0,double y =0) 8 : x_(x), y_(y) 9 {} 10 double get_x () const { return x_ ;} 11 double get_y () const { return y_ ;} 12 }; 13 Point operator+(const Point & p1, const Point & p2 ) { 14 Point result (p1. get_x ()+ p2. get_x (), 15 p1. get_y ()+ p2. get_y ()); 16 return result ; 17 } 14

10 18 int main (void ) { 19 Point p1 (1.0,1.0), p2 (2.0,2.0), p3; 20 p3=p1+p2; cout <<"p3 =(" 23 <<p3. get_x ()<<", " 24 <<p3. get_y ()<<")" << endl ; 25 return 0; 26 } lubo@kid:~/school/notes>./a.out p3=(3, 3) Изразът в ред 20 е еквивалентен на следното: p3=operator+(p1, p2 ); Унарни оператори Унарните оператори могат да се дефинират по два начина: Като нестатична член-функция на класа, която не приема аргументи например: Point Point :: operator -( void) Като функция, която не е член на класа и приема един аргумент например: Point operator -(const Point & p) 15

11 Унарни оператори Нека разгледаме първият вариант за предефиниране на унарен оператор. За пример ще използваме класът Point и унарният оператор -: 1 #include < iostream > 2 using namespace std ; 3 4 class Point { 5 double x_, y_; 6 public : 7 Point (double x =0,double y =0) 8 : x_(x), y_(y) 9 {} 10 double get_x () const { return x_ ;} 11 double get_y () const { return y_ ;} 12 Point operator -( void ) const; 13 }; Point Point :: operator -() const { 15 Point result (- get_x (),- get_y ()); 16 return result ; 17 } 18 int main (void ) { 19 Point p1 (1.0,1.0), p2; p2=-p1; 22 cout <<"p2 =(" 23 <<p2. get_x ()<<", " 24 <<p2. get_y ()<<")" << endl ; 25 return 0; 26 } lubo@kid:~/school/notes>./a.out p2=(-1, -1) Изразът в ред 21 е еквивалентен на следното: p2= p1.operator -();

12 Унарни оператори Нека разгледаме вторият вариант за предефиниране на унарен оператор. Като пример отново ще използваме класът Point и унарният оператор -: 1 #include < iostream > 2 using namespace std ; 3 4 class Point { 5 double x_, y_; 6 public : 7 Point (double x =0,double y =0) 8 : x_(x), y_(y) 9 {} 10 double get_x () const { return x_ ;} 11 double get_y () const { return y_ ;} 12 }; Point operator -(const Point & p ) { 14 Point result (-p. get_x (),-p. get_y ()); 15 return result ; 16 } 17 int main (void ) { 18 Point p1 (1.0,1.0), p2; p2=-p1; 21 cout <<"p2 =(" 22 <<p2. get_x ()<<", " 23 <<p2. get_y ()<<")" << endl ; 24 return 0; 25 } lubo@kid:~/school/notes>./a.out p2=(-1, -1) Изразът в ред 20 е еквивалентен на следното: p2=operator -( p1 );

13 Предефиниране на оператори Всеки оператор може да се дефинира само за синтаксиса, който е определен за него в спецификацията на езика. Например: Не може да се дефинира унарен оператор за делене /, тъй като в спецификацията на езика този оператор е дефиниран като бинарен. Не може да се дефинира бинарен оператор за логическо отрицание!, тъй като в спецификацията на езика този оператор е дефиниран като унарен. Операторът -, обаче, може да бъде предефиниран като унарен и като бинарен оператор, тъй като в спецификацията на езика са дефинирани и двата варианта на оператора. 18 Предефиниране на операторът за изход << Операторът за изход << е бинарен оператор. Първият аргумент на оператора за изход задължително трябва да бъде от типа ostream. Типичният начин за предефиниране на операторът за изход е той да бъде дефиниран като функция извън рамките на класа по следният начин: ostream & operator < <( ostream & out, const Пример: Point & p); 1 ostream & operator < <( ostream & out, const Point & p ) { 2 out << " point (" << p. get_x () < < ", " 3 << p. get_y () < < ")"; 4 return out ; 5 } 19

14 Пример: векторна аритметика 1 #include < iostream > 2 using namespace std ; 3 4 class Point { 5 double x_, y_; 6 public : 7 Point (double x =0,double y =0) 8 : x_(x), y_(y) 9 {} 10 double get_x () const { return x_ ;} 11 double get_y () const { return y_ ;} 12 Point & operator +=( const Point & p); 13 Point & operator -=( const Point & p); 14 Point & operator*=( double alpha ); 15 }; Point & Point :: operator +=( const Point & p ) { 17 x_ +=p. get_x (); 18 y_ +=p. get_y (); 19 return * this ; 20 } 21 Point & Point :: operator -=( const Point & p ) { 22 x_ -=p. get_x (); 23 y_ -=p. get_y (); 24 return * this ; 25 } 26 Point & Point :: operator*=(double alpha ) { 27 x_ *= alpha ; 28 y_ *= alpha ; 29 return * this ; 30 }

15 31 Point operator+(const Point & p1, const Point & p2 ) { 32 Point result = p1; 33 result += p2; 34 return result ; 35 } 36 Point operator -(const Point & p1, const Point & p2 ) { 37 Point result = p1; 38 result -= p2; 39 return result ; 40 } 41 Point operator*(const Point & p, double alpha ) { 42 Point result = p; 43 result *= alpha ; 44 return result ; 45 } 46 Point operator*(double alpha, const Point & p ) { 47 return p* alpha ; 48 } 49 ostream & operator < <( ostream & out, const Point & p ) { 50 out << " point (" << p. get_x () < < ", " 51 << p. get_y () < < ")"; 52 return out ; 53 } 54 int main (void ) { 55 Point p1 (1.0,1.0), p2 (2.0,2.0), p3; 56 p3=p1+p2; 57 cout < < " p3=" << p3 << endl ; 58 p3 += p1+p2; 59 cout < < " p3=" << p3 << endl ; 60 p3 =10.0* p1; 61 cout < < " p3=" << p3 << endl ; 62 p3=p2 *10.0; 63 cout < < " p3=" << p3 << endl ; 64 return 0; 65 } lubo@kid:~/school/notes>./a.out p3=point(3, 3) p3=point(6, 6) p3=point(10, 10) p3=point(20, 20)

16 Пример: масив с проверка на границите 1 #include < iostream > 2 #include < cstdlib > 3 4 using namespace std ; 5 6 class Array { 7 int * data_ ; 8 unsigned int size_ ; 9 public : 10 Array (unsigned i n t size =10) 11 : size_ ( size ), data_ (new int [ size ]) 12 {} 13 ~ Array (void ) { 14 delete [] data_ ; 15 } int & element (unsigned int index ) { 17 i f ( index <0 index >= size_ ) { 18 cerr << " index out of bounds... " << endl ; 19 exit (1); 20 } 21 return data_ [ index ]; 22 } 23 unsigned size () const { 24 return size_ ; 25 } 26 };

17 27 int main (void ) { 28 Array v (3); for ( int i =0;i <3;++ i ) { 31 v. element (i )=i; 32 } 33 for ( int i =0;i <3; i ++) { 34 cout << "v[i]=" << v. element (i) < < endl ; 35 } return 0; 38 } lubo@kid:~/school/notes>./a.out v[i]=0 v[i]=1 v[i]=2 Пример: масив с проверка на границите 1 #include < iostream > 2 #include < cstdlib > 3 4 using namespace std ; 5 6 class Array { 7 int * data_ ; 8 unsigned int size_ ; 9 public : 10 Array (unsigned i n t size =10) 11 : size_ ( size ), data_ (new int [ size ]) 12 {} 13 ~ Array (void ) { 14 delete [] data_ ; 15 } 22

18 16 int & operator[](unsigned int index ) { 17 i f ( index <0 index >= size_ ) { 18 cerr << " index out of bounds... " << endl ; 19 exit (1); 20 } 21 return data_ [ index ]; 22 } 23 unsigned size () const { 24 return size_ ; 25 } 26 }; 27 int main (void ) { 28 Array v (3); for ( int i =0;i <3;++ i ) { 31 v[i ]=i; 32 } 33 for ( int i =0;i <3; i ++) { 34 cout << "v[i]=" << v[i] < < endl ; 35 } return 0; 38 } lubo@kid:~/school/notes>./a.out v[i]=0 v[i]=1 v[i]=2

19 Копиращ конструктор По подразбиране всички обекти могат да бъдат копирани. Всеки клас притежава копиращ конструктор, който е отговорен за копирането на обектите от съответният клас. Копиращият конструктор за класа X има сигнатура X::X(const X&). Ако за даден клас не е дефиниран копиращ конструктор, то компилаторът генерира копиращ конструктор по подразбиране. Семантиката на този конструктор е да копира всички член-променливи на класа. 23 Копиращ конструктор За класа Point поведението на подразбиращият се конструктор е еквивалентно на следното: 1 class Point { 2 double x_, y_; 3 public : 4 Point (const Point & p) 5 : x_(p. x_ ), y_(p.y_) 6 {} 7 //... 8 }; Ако подразбиращото се поведение на този конструктор е неподходящо за даден клас, то потребителят трябва да дефинира сам копиращ конструктор. 24

20 Копиращ конструктор В повечето случаи подразбиращото се поведение на копиращият конструктор е напълно удовлетворително. Нека отново да разгледаме дефинираният от нас масив, с проверката на границите. 6 class Array { 7 int * data_ ; 8 unsigned int size_ ; 9 public : 10 Array (unsigned i n t size =10) 11 : size_ ( size ), data_ (new int [ size ]) 12 {} 13 ~ Array (void ) { 14 delete [] data_ ; 15 } 25 Копиращ конструктор Подразбиращият се копиращ конструктор копира член-променливите на класа. Това означава, че ще се копират член променливите data_ и size_. Областта от паметта, към която сочи data_, няма да бъде копирана. 26

21 За да се обезпечи коректно поведение на масива при копиране е необходимо да се предефинира копиращият конструктор. 6 class Array { 7 int * data_ ; 8 unsigned int size_ ; 9 public : 10 Array (unsigned i n t size =10) 11 : size_ ( size ), data_ (new int [ size_ ]) 12 {} 13 Array (const Array & other ) 14 : size_ ( other. size_ ), data_ (new int [ size_ ]) 15 { 16 for (unsigned int i =0; i < size_ ; i ++) 17 data_ [i]= other. data_ [i ]; 18 } 19 ~ Array (void ) { 20 delete [] data_ ; 21 } int & operator[](unsigned int index ) { 23 i f ( index <0 index >= size_ ) { 24 cerr << " index out of bounds... " << endl ; 25 exit (1); 26 } 27 return data_ [ index ]; 28 } 29 unsigned size () const { 30 return size_ ; 31 } 32 };

22 33 int main (void ) { 34 Array a1 (3); 35 for ( int i =0;i <3;++ i ) { 36 a1[i]=i; 37 } 38 Array a2=a1; 39 for ( int i =0;i <3; i ++) { 40 cout << "a2[i ]=" << a2[i] < < endl ; 41 } 42 return 0; 43 } lubo@kid:~/school/notes>./a.out a2[i]=0 a2[i]=1 a2[i]=2 Копиращ конструктор Обърнете внимание, че като аргумент на копиращият конструктор се използва препратка X::X(const X& x). Ако в дефиницията на копиращият конструктор не се използва препратка X::X(X x), то това ще доведе до безкрайна рекурсия. Проблемът е, че при предаване на аргумента по стойност, се извършва копиране, което води до извикване на копиращ конструктор. Ако искаме да забраним копирането на обектите на даден клас е необходимо да де дефинира private копиращ конструктор. 28

23 Оператор за присвояване По подразбиране за всички обекти може да се използва оператор за присвояване. Всеки клас притежава оператор за присвояване, който е отговорен за присвояване на обекти от съответния клас. Операторът за присвояване на класа X има сигнатура X& X::operator=(const X&). Ако за даден клас не е дефиниран оператор за присвояване, то компилаторът генерира оператор за присвояване по подразбиране. Семантиката на този оператор е да копира всички член-променливи на класа. 29 Оператор за присвояване За класа Point поведението на подразбиращият се оператор за присвояване е еквивалентно на следното: 1 class Point { 2 double x_, y_; 3 public : 4 //... 5 Point & operator=(const Point & other ){ 6 x_= other.x_; 7 y_= other.y_; 8 return * this ; 9 } 10 }; Ако подразбиращото се поведение на този оператор е неподходящо за даден клас, то потребителят трябва да дефинира сам оператор за присвояване. 30

24 Оператор за присвояване: пример В повечето случаи подразбиращото се поведение на оператора за присвояване е напълно удовлетворително. За да се обезпечи коректно поведение на масива при присвояване е необходимо да се предефинира оператора за присвояване. 25 Array & operator=(const Array & other ) { 26 i f ( this!=& other ) { 27 delete [] data_ ; 28 size_ = other. size_ ; 29 data_ =new int [ size_ ]; 30 for (unsigned i =0;i< size_ ;i ++) 31 data_ [i]= other. data_ [i]; 32 } 31

Дефиниране на шаблон Шаблони (Templates) Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София

Дефиниране на шаблон Шаблони (Templates) Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София Дефиниране на шаблон Шаблони (Templates) Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София lchorbadjiev@elsys-bg.org Revision : 1.1 9 март 2005 г. template< class

Подробно

Динамична памет. Конструктори и деструктори Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София

Динамична памет. Конструктори и деструктори Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София Динамична памет. Конструктори и деструктори Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София lchorbadjiev@elsys-bg.org Revision : 1.3 16 ноември 2004 г. Пример:

Подробно

Обработка на грешки Изключения Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София Re

Обработка на грешки Изключения Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София Re Обработка на грешки Изключения Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София lchorbadjiev@elsys-bg.org Revision : 1.1 27 февруари 2005 г. 1 #include < cstdio

Подробно

Lush Green

Lush Green Класове Какво са класовете? Основен инструмент на ООП Средство за дефиниране на абстрактни типове данни Синтактична конструкция, която позволява логическо групиране на данни и операциите над тях Дефиниция

Подробно

Класове в C++ (Rev: 742) Любомир Чорбаджиев 1 20 октомври 2006 г. Съдържание Съдържание 1 Обектно-ориентирано програмиране 1

Класове в C++ (Rev: 742) Любомир Чорбаджиев 1 20 октомври 2006 г. Съдържание Съдържание 1 Обектно-ориентирано програмиране 1 Класове в C++ (Rev: 742) Любомир Чорбаджиев 1 lchorbadjiev@elsys-bg.org 20 октомври 2006 г. Съдържание Съдържание 1 Обектно-ориентирано програмиране 1 1.1 Модулност............................ 1 1.2 Обектно-ориентирана

Подробно

Lush Green

Lush Green Конструктори Жизнен цикъл на обект За обекта се заделя памет и се свързва с неговото име Извиква се подходящ конструктор на обекта... (достъп до компоненти на обект, изпълняване на операции) Достига се

Подробно

Виртуални функции

Виртуални функции Виртуални функции Статично свързване Как компилаторът избира кой метод или коя функция да бъде извикана? Прави се сравнение между формални и фактически параметри и се избира най-точното съвпадение в случай,

Подробно

Потоци (Rev: 1.1)

Потоци  (Rev: 1.1) Потоци (Rev: 1.1) Любомир Чорбаджиев 1 lchorbadjiev@elsys-bg.org 1 Технологическо училище Електронни системи Технически университет, София 8 май 2007 г. Л. Чорбаджиев (ELSYS) Потоци (Rev: 1.1) 8 май 2007

Подробно

В тази част, ще разгледаме аритметичните и логически операции, както, и включването им в изрази. В следващата таблица са дадени всички възможни операц

В тази част, ще разгледаме аритметичните и логически операции, както, и включването им в изрази. В следващата таблица са дадени всички възможни операц В тази част, ще разгледаме аритметичните и логически операции, както, и включването им в изрази. В следващата таблица са дадени всички възможни операции в езикът C и С++. Символ Предназначение Аритметични

Подробно

Указатели. Маисиви, указатели, параметри на функции Калин Георгиев 21 декември 2016 г. Калин Георгиев Увод в програмирането 21 декември 2016 г. 1 / 23

Указатели. Маисиви, указатели, параметри на функции Калин Георгиев 21 декември 2016 г. Калин Георгиев Увод в програмирането 21 декември 2016 г. 1 / 23 Указатели. Маисиви, указатели, параметри на функции Калин Георгиев 21 декември 2016 г. Калин Георгиев Увод в програмирането 21 декември 2016 г. 1 / 23 Указатели! Калин Георгиев Увод в програмирането 21

Подробно

2. Наследяване в C++ Съдържание Съдържание Наследяване (Rev: 1.2) Любомир Чорбаджиев 1 1 февруари 2007 г. 1 Наследяване 1 2

2. Наследяване в C++ Съдържание Съдържание Наследяване (Rev: 1.2) Любомир Чорбаджиев 1 1 февруари 2007 г. 1 Наследяване 1 2 2. Съдържание Съдържание Наследяване (Rev: 1.2) Любомир Чорбаджиев 1 lchorbadjiev@elsys-bg.org 1 февруари 2007 г. 1 Наследяване 1 2 2 3 Полиморфизъм 9 1. Наследяване Наследяване UML UML unified modeling

Подробно

Black and White

Black and White Advanced C++ Memory Management Йордан Димитър Зайков Трендафилов Memory Management Effective C++ 2 nd ed: 3, 5, 7, 8, 9, 10 More Effective C++: 1, 3, 8 Exceptional C++: 35, 36 Какво всъщност прави new?

Подробно

Структура на програма в C - Част 7 - масиви, оператор за индексиране, sizeof оператор

Структура на програма в C - Част 7 - масиви, оператор за индексиране, sizeof оператор Структура на програма в C Част 7 - масиви, оператор за индексиране, sizeof оператор Иван Георгиев, Христо Иванов, Христо Стефанов Технологично училище "Електронни системи", Технически университет, София

Подробно

Сериализация Калин Георгиев 13 май 2016 г. Калин Георгиев Обектно ориентирано програмиране 13 май 2016 г. 1 / 23

Сериализация Калин Георгиев 13 май 2016 г. Калин Георгиев Обектно ориентирано програмиране 13 май 2016 г. 1 / 23 Калин Георгиев 13 май 2016 г. Калин Георгиев Обектно ориентирано програмиране 13 май 2016 г. 1 / 23 f «data; f» data; Калин Георгиев Обектно ориентирано програмиране 13 май 2016 г. 2 / 23 Първо изискване:

Подробно

C++

C++ Управляващи оператори в C++ Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, 2018/19 г. 18 30 октомври 2018 г. Трифон Трифонов (УП 18/19) Управляващи оператори в C++ 18 30 октомври

Подробно

Входно/изходните операции са разширяеми. Лесно се реализират входно/изходни операции за типове, дефинирани от потребителя. Потоци (Rev: 1.1) Любомир Ч

Входно/изходните операции са разширяеми. Лесно се реализират входно/изходни операции за типове, дефинирани от потребителя. Потоци (Rev: 1.1) Любомир Ч Входно/изходните операции са разширяеми. Лесно се реализират входно/изходни операции за типове, дефинирани от потребителя. Потоци (Rev: 1.1) Любомир Чорбаджиев 1 lchorbadjiev@elsys-bg.org 8 май 2007 г.

Подробно

Маисви

Маисви МАСИВИ 1. Структурни типове данни Структура от данни - организирана информация, която може да бъде описана, създадена и обработена с помощта на програма. Скаларни типове данни: Целочислен int Реален double

Подробно

При изпълнението на програма се извършват определени действия над данните, дефинирани в програмата.тези данни могат да бъдат постоянни ( константи ) и

При изпълнението на програма се извършват определени действия над данните, дефинирани в програмата.тези данни могат да бъдат постоянни ( константи ) и При изпълнението на програма се извършват определени действия над данните, дефинирани в програмата.тези данни могат да бъдат постоянни ( константи ) или изменящи се (променливи). Тези данни най-често бива

Подробно

Програмиране на Паскал

Програмиране на Паскал Поради връзката на С++ с езика С в голяма част от литературата е прието записването С/С++. Това е найизползваният език за програмиране в света, поради което синтаксисът на някои от по-новите езици като

Подробно

Структура на програма в C - Част 2 - типове, функции

Структура на програма в C - Част 2 - типове, функции Структура на програма в C Част 2 - типове, функции Иван Георгиев, Христо Иванов, Христо Стефанов Технологично училище "Електронни системи", Технически университет, София 10 март 2019 г. И. Георгиев, Х.

Подробно

4

4 Наследяване и 4 Трифон Трифонов Обектно-ориентирано програмиране, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 11 май 2017 г. Трифон Трифонов (ООП 16/17) Наследяване и голямата

Подробно

Масиви и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 9 ноември 2016 г. Триф

Масиви и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 9 ноември 2016 г. Триф и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 9 ноември 2016 г. Трифон Трифонов (УП 16/17) и низове 9 ноември 2016 г. 1 / 5 Логическо

Подробно

Проф

Проф Утвърдил:.. / доц. д-р Е. Великова / Утвърден от Факултетен съвет с протокол... /... СОФИЙСКИ УНИВЕРСИТЕТ СВ. КЛИМЕНТ ОХРИДСКИ Факултет по Математика и Информатика Специалност: Компютърни науки М И К 0

Подробно

Информатика

Информатика ХИМИКОТЕХНОЛОГИЧЕН И МЕТАЛУРГИЧЕН УНИВЕРСИТЕТ - СОФИЯ ИНФОРМАТИКА част първа лектор: доц. д-р Атанас Атанасов Катедра Програмиране и използване на компютърни системи Лекция 3 ЛОГИЧЕСКИ ОСНОВИ НА КОМПЮТЪРНИТЕ

Подробно

Slide 1

Slide 1 Списъци. Структура и синтаксис. Създаване и показване. Основни операции(добавяне, изваждане на елемент или цял подсписък; подреждане). Трансформации. проф. дмн С. Христова Списъци Списъците / list са основна

Подробно

Канонична форма на клас или 4 (голямата четворка) Трифон Трифонов Обектно-ориентирано програмиране, спец. Компютърни науки, 1 поток, спец. Софтуерно и

Канонична форма на клас или 4 (голямата четворка) Трифон Трифонов Обектно-ориентирано програмиране, спец. Компютърни науки, 1 поток, спец. Софтуерно и Канонична форма на клас или 4 (голямата четворка) Трифон Трифонов Обектно-ориентирано програмиране, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 6 април 2017 г. Трифон Трифонов

Подробно

Лекции по Програмиране първа част I. Въведение в компютрите и програмирането КОМПЮТЪР = АПАРАТУРА + ПРОГРАМНО ОСИГУРЯВАНЕ Апаратна част Hardware(Харду

Лекции по Програмиране първа част I. Въведение в компютрите и програмирането КОМПЮТЪР = АПАРАТУРА + ПРОГРАМНО ОСИГУРЯВАНЕ Апаратна част Hardware(Харду Лекции по Програмиране първа част I. Въведение в компютрите и програмирането КОМПЮТЪР = АПАРАТУРА + ПРОГРАМНО ОСИГУРЯВАНЕ Апаратна част Hardware(Хардуер)Програмна част Software(Софтуер) Хардуерът включва:

Подробно

Масиви и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, 2018/19 г ноември 2018 г. Трифон Трифонов (УП 18/19) Ма

Масиви и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, 2018/19 г ноември 2018 г. Трифон Трифонов (УП 18/19) Ма Масиви и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, 2018/19 г. 15 29 ноември 2018 г. Трифон Трифонов (УП 18/19) Масиви и низове 15 29 ноември 2018 г. 1 / 16 Масиви Логическо

Подробно

ИНТЕРНЕТ ПРОГРАМИРАНЕ - JAVA JAVA ОБЕКТИ Ненко Табаков Пламен Танов Технологическо училище Електронни системи Технически университет София 9 октомври

ИНТЕРНЕТ ПРОГРАМИРАНЕ - JAVA JAVA ОБЕКТИ Ненко Табаков Пламен Танов Технологическо училище Електронни системи Технически университет София 9 октомври JAVA ОБЕКТИ Ненко Табаков Пламен Танов Технологическо училище Електронни системи Технически университет София 9 октомври 2008 JAVA ОБЕКТИ Забележка: Тази лекция е адаптация на лекция от курса: 6.092 Java

Подробно

2. Лексически анализ. Основни понятия и алгоритъм на лексическия анализ. Програмна структура на лексическия анализатор Цел на упражнението Упражнениет

2. Лексически анализ. Основни понятия и алгоритъм на лексическия анализ. Програмна структура на лексическия анализатор Цел на упражнението Упражнениет 2. Лексически анализ. Основни понятия и алгоритъм на лексическия анализ. Програмна структура на лексическия анализатор Цел на упражнението Упражнението представя кратко въведение в теорията на лексическия

Подробно

Масиви и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, 2018/19 г. 15 ноември 6 декември 2018 г. Трифон Трифонов (УП 1

Масиви и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, 2018/19 г. 15 ноември 6 декември 2018 г. Трифон Трифонов (УП 1 Масиви и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, 2018/19 г. 15 ноември 6 декември 2018 г. Трифон Трифонов (УП 18/19) Масиви и низове 15.11-6.12.2018 г. 1 / 17 Масиви

Подробно

МИНИСТЕРСТВО НА ОБРАЗОВАНИЕТО И НАУКАТА

МИНИСТЕРСТВО НА ОБРАЗОВАНИЕТО И НАУКАТА МИНИСТЕРСТВО НА ОБРАЗОВАНИЕТО И НАУКАТА У Ч Е Б Н А П Р О Г Р А М А ЗА ЗАДЪЛЖИТЕЛНА ПРОФЕСИОНАЛНА ПОДГОТОВКА ПО ПРОГРАМИРАНЕ И АЛГОРИТМИЧНИ ЕЗИЦИ ЗА ПРОФЕСИЯ: КОД 482010 ИКОНОМИСТ - ИНФОРМАТИК СПЕЦИАЛНОСТ:

Подробно

3. Синтактичен анализ. Граматика на учебен програмен език STUDENT. Извеждане на изречения от правилата на граматиката Цел на упражнението Упражнението

3. Синтактичен анализ. Граматика на учебен програмен език STUDENT. Извеждане на изречения от правилата на граматиката Цел на упражнението Упражнението 3. Синтактичен анализ. Граматика на учебен програмен език STUDENT. Извеждане на изречения от правилата на граматиката Цел на упражнението Упражнението представя кратко въведение в синтактичния анализ.

Подробно

Програмен език C Пламен Танов Ненко Табаков Мартин Вачовски Технологично училище Електронни системи Технически университет София версия 0.5

Програмен език C Пламен Танов Ненко Табаков Мартин Вачовски Технологично училище Електронни системи Технически университет София версия 0.5 Програмен език C Пламен Танов Ненко Табаков Мартин Вачовски Технологично училище Електронни системи Технически университет София версия 0.5 Литература Необходими програми Kernighan & Ritchie - The C Programming

Подробно

Slide 1

Slide 1 Въведение в VHDL Паралелни оператори Паралелни оператори Паралелен оператор оператор, който се изпълнява едновременно с другите оператори от този тип. Process - Процес

Подробно

Анализ и оптимизация на софтуерни приложения

Анализ и оптимизация на софтуерни приложения Анализ и оптимизация на софтуерни приложения Александър Пенев Васил Василев Съдържание 1. Какво е векторизация? 2. Примери 3. на цикли 4. Масиви от структури или структури от масиви 5. на при различни

Подробно

Рекурсия Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 21 декември 2016 г. 4 януари

Рекурсия Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 21 декември 2016 г. 4 януари Рекурсия Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 21 декември 2016 г. 4 януари 2017 г. Трифон Трифонов (УП 16/17) Рекурсия 21.12.16

Подробно

Структура на програма в C - Част 9 - низове от символи, C-string

Структура на програма в C - Част 9 - низове от символи, C-string Структура на програма в C Част 9 - низове от символи, C-string Иван Георгиев, Христо Иванов, Христо Стефанов Технологично училище "Електронни системи", Технически университет, София 15 май 2019 г. И. Георгиев,

Подробно

Динамична памет Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 21 декември 2016 г. Тр

Динамична памет Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 21 декември 2016 г. Тр Динамична памет Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 21 декември 2016 г. Трифон Трифонов (УП 16/17) Динамична памет 21 декември

Подробно

-

- Лениво оценяване и програмиране от по-висок ред Трифон Трифонов Функционално програмиране, спец. Информатика, 2015/16 г. 7 януари 2016 г. Трифон Трифонов (ФП-И 15/16) Лениво оценяване 7 януари 2016 г.

Подробно

Логаритмична регресия

Логаритмична регресия Логаритмична регресия Доц. д-р Ивайло Пенев Кат. Компютърни науки и технологии Функция на хипотезата h θ x = g θ T x = 1 1 + e θt x Функция на цената J θ = 1 σ m i=1 m Cost(h θ x i, y i ), където Cost(h

Подробно

Лабораторно упражнение 4 Тема : Реализиране на линейни програми.. I. Цел на лабораторното упражнение Аритметични и логически операции в програмният ез

Лабораторно упражнение 4 Тема : Реализиране на линейни програми.. I. Цел на лабораторното упражнение Аритметични и логически операции в програмният ез Лабораторно упражнение 4 Тема : Реализиране на линейни програми.. I. Цел на лабораторното упражнение Аритметични и логически операции в програмният език С. Реализиране на линейни програми. Математически

Подробно

Анализ и оптимизация на софтуерни приложения

Анализ и оптимизация на софтуерни приложения Анализ и оптимизация на софтуерни приложения Александър Пенев Васил Василев Какво могат и какво не могат компилаторите Съдържание 1. Оптимизационен континуум 2. Някои известни видове оптимизации 2/49 Оптимизационен

Подробно

Homework 3

Homework 3 Домашно 3 по дисциплината Дискретни структури за специалност Информатика I курс летен семестър на 2015/2016 уч г в СУ ФМИ Домашната работа се дава на асистента в началото на упражнението на 25 26 май 2016

Подробно

Лабораторно упражнение 6 Тема: Оператори за цикли в езика C++. Реализиране на циклични алгоритми I. Цел на лабораторното упражнение Да се затвърдят зн

Лабораторно упражнение 6 Тема: Оператори за цикли в езика C++. Реализиране на циклични алгоритми I. Цел на лабораторното упражнение Да се затвърдят зн Лабораторно упражние 6 Тема: Оператори за цикли в езика C++. Реализира на циклични алгоритми I. Цел на лабораторното упражние Да се затвърдят знанията на студентите за организацията и синтаксиса на програми

Подробно

Microsoft Word - Sem02_KH_VM2-19.doc

Microsoft Word - Sem02_KH_VM2-19.doc Семинар Действия с матрици. Собствени стойности и собствени вектори на матрици. Привеждане на квадратична форма в каноничен вид. Матрица k всяка правоъгълна таблица от k-реда и -стълба. Квадратна матрица

Подробно