diff options
clean up
1 files changed, 0 insertions, 161 deletions
| -rw-r--r-- | Sem. 08/README.md | 161 |
diff --git a/Sem. 08/README.md b/Sem. 08/README.md deleted file mode 100644 index 41e40f4..0000000 --- a/Sem. 08/README.md +++ /dev/null @@ -1,161 +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; -} - ``` |
