Предефиниране на оператори. Копиращ конструктор. Оператор за присвояване Любомир Чорбаджиев Технологическо училище Електронни системи Технически униве
|
|
- Гергана Вачкова
- преди 4 години
- Прегледи:
Препис
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) Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София lchorbadjiev@elsys-bg.org Revision : 1.1 9 март 2005 г. template< class
ПодробноДинамична памет. Конструктори и деструктори Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София
Динамична памет. Конструктори и деструктори Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София lchorbadjiev@elsys-bg.org Revision : 1.3 16 ноември 2004 г. Пример:
ПодробноОбработка на грешки Изключения Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София Re
Обработка на грешки Изключения Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София lchorbadjiev@elsys-bg.org Revision : 1.1 27 февруари 2005 г. 1 #include < cstdio
ПодробноLush Green
Класове Какво са класовете? Основен инструмент на ООП Средство за дефиниране на абстрактни типове данни Синтактична конструкция, която позволява логическо групиране на данни и операциите над тях Дефиниция
ПодробноКласове в 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
Конструктори Жизнен цикъл на обект За обекта се заделя памет и се свързва с неговото име Извиква се подходящ конструктор на обекта... (достъп до компоненти на обект, изпълняване на операции) Достига се
ПодробноВиртуални функции
Виртуални функции Статично свързване Как компилаторът избира кой метод или коя функция да бъде извикана? Прави се сравнение между формални и фактически параметри и се избира най-точното съвпадение в случай,
ПодробноПотоци (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
Подробно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
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 оператор Иван Георгиев, Христо Иванов, Христо Стефанов Технологично училище "Електронни системи", Технически университет, София
ПодробноСериализация Калин Георгиев 13 май 2016 г. Калин Георгиев Обектно ориентирано програмиране 13 май 2016 г. 1 / 23
Калин Георгиев 13 май 2016 г. Калин Георгиев Обектно ориентирано програмиране 13 май 2016 г. 1 / 23 f «data; f» data; Калин Георгиев Обектно ориентирано програмиране 13 май 2016 г. 2 / 23 Първо изискване:
ПодробноC++
Управляващи оператори в C++ Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, 2018/19 г. 18 30 октомври 2018 г. Трифон Трифонов (УП 18/19) Управляващи оператори в C++ 18 30 октомври
ПодробноВходно/изходните операции са разширяеми. Лесно се реализират входно/изходни операции за типове, дефинирани от потребителя. Потоци (Rev: 1.1) Любомир Ч
Входно/изходните операции са разширяеми. Лесно се реализират входно/изходни операции за типове, дефинирани от потребителя. Потоци (Rev: 1.1) Любомир Чорбаджиев 1 lchorbadjiev@elsys-bg.org 8 май 2007 г.
ПодробноМаисви
МАСИВИ 1. Структурни типове данни Структура от данни - организирана информация, която може да бъде описана, създадена и обработена с помощта на програма. Скаларни типове данни: Целочислен int Реален double
ПодробноПри изпълнението на програма се извършват определени действия над данните, дефинирани в програмата.тези данни могат да бъдат постоянни ( константи ) и
При изпълнението на програма се извършват определени действия над данните, дефинирани в програмата.тези данни могат да бъдат постоянни ( константи ) или изменящи се (променливи). Тези данни най-често бива
ПодробноПрограмиране на Паскал
Поради връзката на С++ с езика С в голяма част от литературата е прието записването С/С++. Това е найизползваният език за програмиране в света, поради което синтаксисът на някои от по-новите езици като
ПодробноСтруктура на програма в C - Част 2 - типове, функции
Структура на програма в C Част 2 - типове, функции Иван Георгиев, Христо Иванов, Христо Стефанов Технологично училище "Електронни системи", Технически университет, София 10 март 2019 г. И. Георгиев, Х.
Подробно4
Наследяване и 4 Трифон Трифонов Обектно-ориентирано програмиране, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 11 май 2017 г. Трифон Трифонов (ООП 16/17) Наследяване и голямата
ПодробноМасиви и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 9 ноември 2016 г. Триф
и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 9 ноември 2016 г. Трифон Трифонов (УП 16/17) и низове 9 ноември 2016 г. 1 / 5 Логическо
ПодробноПроф
Утвърдил:.. / доц. д-р Е. Великова / Утвърден от Факултетен съвет с протокол... /... СОФИЙСКИ УНИВЕРСИТЕТ СВ. КЛИМЕНТ ОХРИДСКИ Факултет по Математика и Информатика Специалност: Компютърни науки М И К 0
ПодробноИнформатика
ХИМИКОТЕХНОЛОГИЧЕН И МЕТАЛУРГИЧЕН УНИВЕРСИТЕТ - СОФИЯ ИНФОРМАТИКА част първа лектор: доц. д-р Атанас Атанасов Катедра Програмиране и използване на компютърни системи Лекция 3 ЛОГИЧЕСКИ ОСНОВИ НА КОМПЮТЪРНИТЕ
ПодробноSlide 1
Списъци. Структура и синтаксис. Създаване и показване. Основни операции(добавяне, изваждане на елемент или цял подсписък; подреждане). Трансформации. проф. дмн С. Христова Списъци Списъците / list са основна
ПодробноКанонична форма на клас или 4 (голямата четворка) Трифон Трифонов Обектно-ориентирано програмиране, спец. Компютърни науки, 1 поток, спец. Софтуерно и
Канонична форма на клас или 4 (голямата четворка) Трифон Трифонов Обектно-ориентирано програмиране, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 6 април 2017 г. Трифон Трифонов
ПодробноЛекции по Програмиране първа част I. Въведение в компютрите и програмирането КОМПЮТЪР = АПАРАТУРА + ПРОГРАМНО ОСИГУРЯВАНЕ Апаратна част Hardware(Харду
Лекции по Програмиране първа част I. Въведение в компютрите и програмирането КОМПЮТЪР = АПАРАТУРА + ПРОГРАМНО ОСИГУРЯВАНЕ Апаратна част Hardware(Хардуер)Програмна част Software(Софтуер) Хардуерът включва:
ПодробноМасиви и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, 2018/19 г ноември 2018 г. Трифон Трифонов (УП 18/19) Ма
Масиви и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, 2018/19 г. 15 29 ноември 2018 г. Трифон Трифонов (УП 18/19) Масиви и низове 15 29 ноември 2018 г. 1 / 16 Масиви Логическо
ПодробноИНТЕРНЕТ ПРОГРАМИРАНЕ - JAVA JAVA ОБЕКТИ Ненко Табаков Пламен Танов Технологическо училище Електронни системи Технически университет София 9 октомври
JAVA ОБЕКТИ Ненко Табаков Пламен Танов Технологическо училище Електронни системи Технически университет София 9 октомври 2008 JAVA ОБЕКТИ Забележка: Тази лекция е адаптация на лекция от курса: 6.092 Java
Подробно2. Лексически анализ. Основни понятия и алгоритъм на лексическия анализ. Програмна структура на лексическия анализатор Цел на упражнението Упражнениет
2. Лексически анализ. Основни понятия и алгоритъм на лексическия анализ. Програмна структура на лексическия анализатор Цел на упражнението Упражнението представя кратко въведение в теорията на лексическия
ПодробноМасиви и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 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. Извеждане на изречения от правилата на граматиката Цел на упражнението Упражнението представя кратко въведение в синтактичния анализ.
ПодробноПрограмен език C Пламен Танов Ненко Табаков Мартин Вачовски Технологично училище Електронни системи Технически университет София версия 0.5
Програмен език C Пламен Танов Ненко Табаков Мартин Вачовски Технологично училище Електронни системи Технически университет София версия 0.5 Литература Необходими програми Kernighan & Ritchie - The C Programming
ПодробноSlide 1
Въведение в VHDL Паралелни оператори Паралелни оператори Паралелен оператор оператор, който се изпълнява едновременно с другите оператори от този тип. Process - Процес
ПодробноАнализ и оптимизация на софтуерни приложения
Анализ и оптимизация на софтуерни приложения Александър Пенев Васил Василев Съдържание 1. Какво е векторизация? 2. Примери 3. на цикли 4. Масиви от структури или структури от масиви 5. на при различни
ПодробноРекурсия Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 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 Иван Георгиев, Христо Иванов, Христо Стефанов Технологично училище "Електронни системи", Технически университет, София 15 май 2019 г. И. Георгиев,
ПодробноДинамична памет Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 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. Цел на лабораторното упражнение Аритметични и логически операции в програмният език С. Реализиране на линейни програми. Математически
ПодробноАнализ и оптимизация на софтуерни приложения
Анализ и оптимизация на софтуерни приложения Александър Пенев Васил Василев Какво могат и какво не могат компилаторите Съдържание 1. Оптимизационен континуум 2. Някои известни видове оптимизации 2/49 Оптимизационен
ПодробноHomework 3
Домашно 3 по дисциплината Дискретни структури за специалност Информатика I курс летен семестър на 2015/2016 уч г в СУ ФМИ Домашната работа се дава на асистента в началото на упражнението на 25 26 май 2016
ПодробноЛабораторно упражнение 6 Тема: Оператори за цикли в езика C++. Реализиране на циклични алгоритми I. Цел на лабораторното упражнение Да се затвърдят зн
Лабораторно упражние 6 Тема: Оператори за цикли в езика C++. Реализира на циклични алгоритми I. Цел на лабораторното упражние Да се затвърдят знанията на студентите за организацията и синтаксиса на програми
ПодробноMicrosoft Word - Sem02_KH_VM2-19.doc
Семинар Действия с матрици. Собствени стойности и собствени вектори на матрици. Привеждане на квадратична форма в каноничен вид. Матрица k всяка правоъгълна таблица от k-реда и -стълба. Квадратна матрица
Подробно