Website Summary Files Commits Branches @commit @diff @stats
path: root / Sem. 08 / Complex / Complex.cpp
diff options
context:
space:
mode:
Commit1cf7542f449ec0d2081e6257a836ebfc544b2ad1 (patch)
Author
 angeld55 <angel_dimitriev@abv.bg>
2021-04-16 22:38:54 +0300
Committer
 angeld55 <angel_dimitriev@abv.bg>
2021-04-16 22:38:54 +0300
Files4f9a39150c787de2ea94461b9e53b5b094730f84 /Sem. 08/Complex/Complex.cpp
Object-oriented_programming_FMI-1cf7542f449ec0d2081e6257a836ebfc544b2ad1.tar
Object-oriented_programming_FMI-1cf7542f449ec0d2081e6257a836ebfc544b2ad1.tar.gz
Object-oriented_programming_FMI-1cf7542f449ec0d2081e6257a836ebfc544b2ad1.zip
Parentb9df311eb4e479c150eeb112df91a3ce4dd111ba (diff)
Parent9aa9147fcc7d0469262ac02071a8c9fc54734d27 (diff)
Merge branch 'master' of https://github.com/Angeld55/Object-oriented_programming_FMI
1 files changed, 102 insertions, 0 deletions
-rw-r--r--Sem. 08/Complex/Complex.cpp102
diff --git a/Sem. 08/Complex/Complex.cpp b/Sem. 08/Complex/Complex.cpp
index e69de29..c604d0a 100644
--- a/Sem. 08/Complex/Complex.cpp
+++ b/Sem. 08/Complex/Complex.cpp
@@ -0,0 +1,102 @@
+#include "Complex.h"
+
+Complex::Complex()
+{
+ real = 0;
+ im = 0;
+}
+Complex::Complex(double real, double im)
+{
+ this->real = real;
+ this->im = im;
+}
+Complex& Complex::operator+=(const Complex& other)
+{
+ real += other.real;
+ im += other.im;
+ return *this;
+}
+Complex& Complex::operator-=(const Complex& other)
+{
+ real -= other.real;
+ im -= other.im;
+ return *this;
+}
+Complex& Complex::operator*=(const Complex& other)
+{
+ int oldReal = real;
+ real = real*other.real - im*other.im;
+ im = oldReal*other.im + im * other.real;
+ return *this;
+}
+Complex& Complex::operator/=(const Complex& other) // a/=b
+{
+ Complex Conjugated = other.getConjugated(); //взимаме комплексно спрегнатата на другата дроб (b)
+
+ Complex otherCopy(other);// копираме другата (b), за да не я промяняме.
+
+ //Умножаваме двете по комплексно спрегнатата.
+ *this *= Conjugated;
+ otherCopy *= Conjugated; //Тук трябва да остане само реална част.
+
+ if (otherCopy.real != 0)
+ {
+ real /= otherCopy.real;
+ im /= otherCopy.real;
+ }
+
+ return *this;
+}
+
+
+//След дефинирането на +=, -=, *= и /=, можем лесно да дефинираме +, -, * и /, преизползвайки вече написаните опратори.
+Complex operator+(const Complex& lhs, const Complex& rhs) { //a+b
+
+ Complex result(lhs); // Създаваме нов обект, който е копие на a (използваме копи-конструктора)
+ result += rhs; //към копието на a, добавяме b (Използваме вече дефинирания оператор +=)
+
+ return result;
+}
+//Операторите -, *, / са аналогични с +.
+Complex operator-(const Complex& lhs, const Complex& rhs) {
+ Complex result(lhs);
+ result -= rhs;
+
+ return result;
+}
+
+Complex operator*(const Complex& lhs, const Complex& rhs) {
+
+ Complex result(lhs);
+ result *= rhs;
+
+ return result;
+}
+
+Complex operator/(const Complex& lhs, const Complex& rhs) {
+
+ Complex result(lhs);
+ result /= rhs;
+
+ return result;
+}
+
+Complex Complex::getConjugated() const
+{
+ Complex result(*this);
+ result.im *= -1;
+
+ return result;
+}
+
+// за да можем да правим cout<<c1 или да запазваме във файл и др.
+std::ostream& operator<<(std::ostream& ofs, const Complex& r) {
+
+ return ofs << r.real << ' ' << r.im << 'i';
+}
+
+// за да можем да правим cin>>c1 или да четем от файл и др.
+std::istream& operator>>(std::istream& ifs, Complex& r) {
+
+ return ifs >> r.real >> r.im;
+}