diff options
added new examples
4 files changed, 0 insertions, 332 deletions
| -rw-r--r-- | OperatorOverloading/Complex/Complex.hpp | 136 | ||||
| -rw-r--r-- | OperatorOverloading/Vector/Source.cpp | 14 | ||||
| -rw-r--r-- | OperatorOverloading/Vector/Vector.cpp | 145 | ||||
| -rw-r--r-- | OperatorOverloading/Vector/Vector.h | 37 |
diff --git a/OperatorOverloading/Complex/Complex.hpp b/OperatorOverloading/Complex/Complex.hpp deleted file mode 100644 index 8a6edd5..0000000 --- a/OperatorOverloading/Complex/Complex.hpp +++ /dev/null @@ -1,136 +0,0 @@ -#include <iostream> -class Complex -{ -private: - double real; - double im; - -public: - Complex(); - Complex(double real, double im); - - Complex getConjugated() const; //връща комплексно спрегнатото число на текущия обект. - - //assignment operators - // a+=b Към а се добавя стойността на b. а се променя , b не се. Операцията ще върне a за да може да се правят верижни изрази (a+=b+=c) - Complex& operator+=(const Complex&); - Complex& operator-=(const Complex&); - Complex& operator*=(const Complex&); - Complex& operator/=(const Complex&); - - - - //stream opeartors ( std::cout>> c1) (std::cin<<c1 ) - friend std::ostream& operator<<(std::ostream&, const Complex&); - friend std::istream& operator>>(std::istream&, Complex&); - -}; -// a+b. Операторът връща НОВА променлива(Complex), която е резултатът от операцията. -Complex operator+(const Complex&, const Complex&); -Complex operator-(const Complex&, const Complex&); -Complex operator*(const Complex&, const Complex&); -Complex operator/(const Complex&, const Complex&); - - - -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; -} diff --git a/OperatorOverloading/Vector/Source.cpp b/OperatorOverloading/Vector/Source.cpp deleted file mode 100644 index 02b3dd5..0000000 --- a/OperatorOverloading/Vector/Source.cpp +++ /dev/null @@ -1,14 +0,0 @@ -#include <iostream>
-#include "Vector.h"
-int main()
-{
-
-
- Vector v1(2);
-
- std::cin >> v1;
-
- std::cout << (v1);
-
-
-}
diff --git a/OperatorOverloading/Vector/Vector.cpp b/OperatorOverloading/Vector/Vector.cpp deleted file mode 100644 index 397cd46..0000000 --- a/OperatorOverloading/Vector/Vector.cpp +++ /dev/null @@ -1,145 +0,0 @@ -#include "Vector.h"
-
-Vector::Vector() :coordinates(nullptr), length(0)
-{}
-Vector::Vector(int len)
-{
- coordinates = new int[len];
- for (int i = 0; i < len; i++)
- coordinates[i] = 0;
- length = len;
-}
-void Vector::CopyFrom(const Vector& other)
-{
- coordinates = new int[other.length];
- for (int i = 0; i < other.GetLen(); i++)
- coordinates[i] = other.coordinates[i];
- length = other.length;
-}
-void Vector::Free()
-{
- delete[] coordinates;
- length = 0;
-}
-Vector::Vector(const Vector& other)
-{
- CopyFrom(other);
-}
-Vector& Vector::operator=(const Vector& other)
-{
- if (this != &other)
- {
- Free();
- CopyFrom(other);
- }
- return *this;
-}
-Vector::~Vector()
-{
- Free();
-}
-
-int& Vector::operator[](int index)
-{
- if (index < length)
- return coordinates[index];
- else
- throw 0;
-}
-void Vector::print()
-{
- std::cout << '(';
- for (int i = 0; i < length; i++)
- std::cout << coordinates[i]<<" ";
- std::cout <<')' <<std::endl;
-}
-
-int Vector::GetLen() const
-{
- return length;
-}
-int Vector::GetAtIndex(int index) const
-{
- if (index<length)
- return coordinates[index];
- else
- return 0;
-}
-Vector& Vector::operator+=(const Vector& other)
-{
- if (GetLen() != other.GetLen())
- throw "Invalid operation";
- for (int i = 0; i < other.length; i++)
- coordinates[i] += other.coordinates[i];
- return *this;
-}
-
-Vector& Vector::operator-=(const Vector& other)
-{
- if (GetLen() != other.GetLen())
- throw "Invalid operation";
- for (int i = 0; i < other.length; ++i)
- coordinates[i] -= other.coordinates[i];
- return *this;
-}
-
-Vector& Vector::operator*=(int scalar)
-{
- for (int i = 0; i < length; i++)
- coordinates[i] *= scalar;
- return *this;
-}
-Vector operator+(const Vector& lhs,const Vector& rhs)
-{
- Vector temp(lhs);
- temp += rhs;
- return temp;
-}
-
-Vector operator-(const Vector& lhs, const Vector& rhs)
-{
- Vector temp(lhs);
- temp -= rhs;
- return temp;
-}
-
-int operator%(const Vector& lhs, const Vector& rhs)
-{
- int min = lhs.GetLen() < rhs.GetLen() ? lhs.GetLen() : rhs.GetLen();
- int result = 0;
- for (int i = 0; i < min; i++)
- result += lhs.GetAtIndex(i) * rhs.GetAtIndex(i);
- return result;
-}
-bool operator||(const Vector& lhs, const Vector& rhs)// a и b са перпендикулярни <-> a*K=b (K е константа).
-{
- double coeff = lhs.GetAtIndex(0) / rhs.GetAtIndex(0);
- for (int i = 1; i < lhs.GetLen(); i++)
- {
- if (lhs.GetAtIndex(i) == 0 || rhs.GetAtIndex(i) == 0)
- continue;
- double Newfirst = lhs.GetAtIndex(i);
- double Newcoeff = Newfirst / rhs.GetAtIndex(i);
- if (abs(Newcoeff-coeff)>0.01)
- return false;
- }
- return true;
-}
-bool operator|=(const Vector& lhs, const Vector& rhs)
-{
- return lhs%rhs == 0; //скаларното произведение на два успоредни вектора е 0.
-}
-
-std::ostream& operator<<(std::ostream& os, const Vector& v)
-{
- for (int i = 0; i < v.GetLen(); ++i)
- os << v.GetAtIndex(i) << " ";
- return os;
-}
-
-std::istream& operator>>(std::istream& ifs, Vector& v)
-{
- for (int i = 0; i < v.GetLen(); ++i)
- ifs >> v[i];
- return ifs;
-}
diff --git a/OperatorOverloading/Vector/Vector.h b/OperatorOverloading/Vector/Vector.h deleted file mode 100644 index 03969d8..0000000 --- a/OperatorOverloading/Vector/Vector.h +++ /dev/null @@ -1,37 +0,0 @@ -#include <iostream>
-class Vector
-{
-private:
- int* coordinates;
- int length;
- void CopyFrom(const Vector& other);
- void Free();
-public:
- Vector();
- Vector(int len);
-
- Vector(const Vector& other);
- Vector& operator=(const Vector& other);
- ~Vector();
-
- int GetLen() const;
-
- Vector& operator+=(const Vector& other);
- Vector& operator-=(const Vector& other);
- Vector& operator*=(int);
-
- friend std::ostream& operator<<(std::ostream&, const Vector& v);
- friend std::istream& operator>>(std::istream&, Vector& v);
-
- int GetAtIndex(int index) const;
- int& operator[](int index);// оператор за индексиране(като в масивите) vector a; a[4] -взима четвъртия кординат на вектора
- void print();
-};
-
-Vector operator+(const Vector& lhs, const Vector& rhs);// Събиране на два вектора
-Vector operator-(const Vector& lhs, const Vector& rhs);// Изваждане на два вектора
-
-int operator%(const Vector& lhs, const Vector& rhs); // Скаларно произведение на два вектора
-
-bool operator||(const Vector& lhs, const Vector& rhs); // Дали два вектора са успоредни
-bool operator|=(const Vector& lhs, const Vector& rhs); // Дали два вектора са перпендикулярни
|
