Website Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
Commitcf934b5c4a24998ea19315dbb181a84daacf7e81 (patch)
Author
 Angel Dimitriev <angel_dimitriev@abv.bg>
2022-04-12 19:34:44 +0300
Committer
 GitHub <noreply@github.com>
2022-04-12 19:34:44 +0300
Filesb1a21374df32389722ea7a5d4b14b0031936ec6e
Object-oriented_programming_FMI-cf934b5c4a24998ea19315dbb181a84daacf7e81.tar
Object-oriented_programming_FMI-cf934b5c4a24998ea19315dbb181a84daacf7e81.tar.gz
Object-oriented_programming_FMI-cf934b5c4a24998ea19315dbb181a84daacf7e81.zip
Parent59e4b1ceae07abb45195f79bebceee9e995868fa (diff)
Create README.md
1 files changed, 161 insertions, 0 deletions
-rw-r--r--Sem. 08/README.md161
diff --git a/Sem. 08/README.md b/Sem. 08/README.md
new file mode 100644
index 0000000..a283878
--- /dev/null
+++ b/Sem. 08/README.md
@@ -0,0 +1,161 @@
+# Приятелски класове и функции. Mutable. Предефиниране на оператори.
+## 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:**
+Реализирайте клас **ComplexNumber**, който ще се използва за работа с комплексни числа.
+Предефинирайте оператори със следната функционалност:
+ - Събиране на комплексни числа.
+ - Изваждане на комплексни числа.
+ - Умножение на комплексни числа.
+ - Деление на комплексни числа
+ - Вход и изход от потоци.
+
+```c++
+
+
+int main()
+{
+ ComplexNumber c;
+ cin >> c;
+
+ ComplexNumber c2;
+ cin >> c2;
+
+ ComplexNumber result = c2 / c;
+
+ cout << result << endl;
+}
+ ```