From d244e1bda10d420062c6a2a07f3c41a4fe9f7306 Mon Sep 17 00:00:00 2001 From: Angel Dimitriev Date: Fri, 16 Apr 2021 15:50:43 +0300 Subject: Rename READ to README.md --- Sem. 08/READ | 162 ------------------------------------------------------ Sem. 08/README.md | 162 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 162 insertions(+), 162 deletions(-) delete mode 100644 Sem. 08/READ create mode 100644 Sem. 08/README.md diff --git a/Sem. 08/READ b/Sem. 08/READ deleted file mode 100644 index bf2065d..0000000 --- a/Sem. 08/READ +++ /dev/null @@ -1,162 +0,0 @@ -# Предефиниране на оператори. Приятелски класове и функции. -## Oператори -### Видове оператори. -в C++ има два вида оператори: - - - Унарни (на един аргумент) - - Бинарни (на два аргумента) - - -### Операторите се характеризират с: - - Приоритет - - Асоциативност - - Позиция на оператора спярмо аргумента - *префиксен*, *инфиксен* и *суфиксен* - -### Списъка на операторите в C++: -| Оператор | Асоциативност | -|------------------------------------------------|---------------------------------| -| () [] -> . ++ - - | лявоасоциативните | -| + - ! ~ ++ - - (type)* & sizeof | дясноасоциативните | -| * / % | лявоасоциативните | -| + - | лявоасоциативните | -| << >> | лявоасоциативните | -| < <= > >= | лявоасоциативните | -| == != | лявоасоциативните | -| & | лявоасоциативните | -| ^ | лявоасоциативните | -| \| | лявоасоциативните | -| && | лявоасоциативните | -| \|\| | лявоасоциативните | -| ?: | дясноасоциативните | -| = += -= *= /= %= >>= <<= &= ^= | дясноасоциативните | - -### Предефиниране на оператор (пример) -```c++ -Complex& Complex::operator+=(const Complex& other) -{ - real += other.real; - im += other.im; - return *this; -} - ``` -Вече може да правим следното: -```c++ -ina main() -{ - Complex c(1,3); //1 + 3i; - Complex c2(10,20) // 10 + 2i; - c += c2 // now c is 11 + 5i -} - ``` -При предефинирането на оператор **не могат** да се променят *приоритетът*, *асоциативността*, броят и позицията на *аргументите* му. - -## Приятелски класове и приятелски функции -Декларират се с на запазената дума **friend** пред прототипа на функцията. -Даденият friend-клас/фунцкия има достъп до всички компоненти на класа. -Т.е. всички членове на класа са public за friend-класовете/функциите приятели. -### Приятелски функции (пример) - - ```c++ -class Complex -{ - -private: - double real; - double im; -public: - friend double getModulos(const Complex& other); - . - . - . -} - ``` - ```c++ - -double getModulos(const Complex& other) -{ - return sqrt((other.real – other.real) * (other.real – other.real) + (other.im – other.im ) * (other.im – other.im)); -} - -``` -## Задачи - -**Задача 1:** -Реализирайте клас **Nvector**, който ще се използва за работа с математически вектор. -Предефинирайте оператори със следната функционалност: - - Събиране на вектори. - - Изваждане на вектори. - - Умножение на вектор със скалар. - - Проверка дали два вектора са успоредни. - - Проверка дали два вектора са перпендикулярни. - - Взимане на дължина на вектор. - - Достъп до произволен елемент на вектор. - - Вход и изход от потоци. - - ```c++ -int main() -{ - Nvector v(4); - cin >> v; - - Nvector v2(4); - cin >> v; - - Nvector result = v + v2; - - cout << result << endl; - -} - ``` - Релизирайте клас двумерната декартова координатна система, която приема 2 вектора, които са нейният базис. - Реализрайте следните функции: - - Връща вектор в базиса по подадени 2 координата. - - По подаден вектор връща координатите му в базиса. - - ```c++ -int main() -{ - Nvector v(4); - v[0] = 2; - v[1] = 1; - - Nvector v2(4); - v2[0] = 3; - v2[1] = 1; - - twoDimCoordSystem s(v1, v2); - - cout << s1.getVectorByCoordinates(7, 4); // [26, 11] - - cout << s1.getCoordinatesByVector(7, 4); // [5, -1] - - cout << result << endl; - -} - ``` - - **Задача 2:** -Реализирайте клас **Complex**, който ще се използва за работа с комплексни числа. -Предефинирайте оператори със следната функционалност: - - Събиране на комплексни числа. - - Изваждане на комплексни числа. - - Умножение на комплексни числа. - - Деление на комплексни числа - - Вход и изход от потоци. - -```c++ - - -int main() -{ - Complex c; - cin >> c; - - Complex c2; - cin >> c2; - - Complex result = c2 / c; - - cout << result << endl; -} - ``` - diff --git a/Sem. 08/README.md b/Sem. 08/README.md new file mode 100644 index 0000000..bf2065d --- /dev/null +++ b/Sem. 08/README.md @@ -0,0 +1,162 @@ +# Предефиниране на оператори. Приятелски класове и функции. +## Oператори +### Видове оператори. +в C++ има два вида оператори: + + - Унарни (на един аргумент) + - Бинарни (на два аргумента) + + +### Операторите се характеризират с: + - Приоритет + - Асоциативност + - Позиция на оператора спярмо аргумента - *префиксен*, *инфиксен* и *суфиксен* + +### Списъка на операторите в C++: +| Оператор | Асоциативност | +|------------------------------------------------|---------------------------------| +| () [] -> . ++ - - | лявоасоциативните | +| + - ! ~ ++ - - (type)* & sizeof | дясноасоциативните | +| * / % | лявоасоциативните | +| + - | лявоасоциативните | +| << >> | лявоасоциативните | +| < <= > >= | лявоасоциативните | +| == != | лявоасоциативните | +| & | лявоасоциативните | +| ^ | лявоасоциативните | +| \| | лявоасоциативните | +| && | лявоасоциативните | +| \|\| | лявоасоциативните | +| ?: | дясноасоциативните | +| = += -= *= /= %= >>= <<= &= ^= | дясноасоциативните | + +### Предефиниране на оператор (пример) +```c++ +Complex& Complex::operator+=(const Complex& other) +{ + real += other.real; + im += other.im; + return *this; +} + ``` +Вече може да правим следното: +```c++ +ina main() +{ + Complex c(1,3); //1 + 3i; + Complex c2(10,20) // 10 + 2i; + c += c2 // now c is 11 + 5i +} + ``` +При предефинирането на оператор **не могат** да се променят *приоритетът*, *асоциативността*, броят и позицията на *аргументите* му. + +## Приятелски класове и приятелски функции +Декларират се с на запазената дума **friend** пред прототипа на функцията. +Даденият friend-клас/фунцкия има достъп до всички компоненти на класа. +Т.е. всички членове на класа са public за friend-класовете/функциите приятели. +### Приятелски функции (пример) + + ```c++ +class Complex +{ + +private: + double real; + double im; +public: + friend double getModulos(const Complex& other); + . + . + . +} + ``` + ```c++ + +double getModulos(const Complex& other) +{ + return sqrt((other.real – other.real) * (other.real – other.real) + (other.im – other.im ) * (other.im – other.im)); +} + +``` +## Задачи + +**Задача 1:** +Реализирайте клас **Nvector**, който ще се използва за работа с математически вектор. +Предефинирайте оператори със следната функционалност: + - Събиране на вектори. + - Изваждане на вектори. + - Умножение на вектор със скалар. + - Проверка дали два вектора са успоредни. + - Проверка дали два вектора са перпендикулярни. + - Взимане на дължина на вектор. + - Достъп до произволен елемент на вектор. + - Вход и изход от потоци. + + ```c++ +int main() +{ + Nvector v(4); + cin >> v; + + Nvector v2(4); + cin >> v; + + Nvector result = v + v2; + + cout << result << endl; + +} + ``` + Релизирайте клас двумерната декартова координатна система, която приема 2 вектора, които са нейният базис. + Реализрайте следните функции: + - Връща вектор в базиса по подадени 2 координата. + - По подаден вектор връща координатите му в базиса. + + ```c++ +int main() +{ + Nvector v(4); + v[0] = 2; + v[1] = 1; + + Nvector v2(4); + v2[0] = 3; + v2[1] = 1; + + twoDimCoordSystem s(v1, v2); + + cout << s1.getVectorByCoordinates(7, 4); // [26, 11] + + cout << s1.getCoordinatesByVector(7, 4); // [5, -1] + + cout << result << endl; + +} + ``` + + **Задача 2:** +Реализирайте клас **Complex**, който ще се използва за работа с комплексни числа. +Предефинирайте оператори със следната функционалност: + - Събиране на комплексни числа. + - Изваждане на комплексни числа. + - Умножение на комплексни числа. + - Деление на комплексни числа + - Вход и изход от потоци. + +```c++ + + +int main() +{ + Complex c; + cin >> c; + + Complex c2; + cin >> c2; + + Complex result = c2 / c; + + cout << result << endl; +} + ``` + -- cgit v1.3.1-23-gd82d