From 0218c678e13e1cb94a352c91733cea68467dc566 Mon Sep 17 00:00:00 2001 From: Angeld55 Date: Sun, 14 Feb 2021 23:06:35 +0200 Subject: start from scratch --- Operator_overloading/Complex/Complex.hpp | 136 ----------------------------- Operator_overloading/Vector/Source.cpp | 14 --- Operator_overloading/Vector/Vector.cpp | 145 ------------------------------- Operator_overloading/Vector/Vector.h | 37 -------- 4 files changed, 332 deletions(-) delete mode 100644 Operator_overloading/Complex/Complex.hpp delete mode 100644 Operator_overloading/Vector/Source.cpp delete mode 100644 Operator_overloading/Vector/Vector.cpp delete mode 100644 Operator_overloading/Vector/Vector.h (limited to 'Operator_overloading') diff --git a/Operator_overloading/Complex/Complex.hpp b/Operator_overloading/Complex/Complex.hpp deleted file mode 100644 index 8a6edd5..0000000 --- a/Operator_overloading/Complex/Complex.hpp +++ /dev/null @@ -1,136 +0,0 @@ -#include -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<>(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::istream& operator>>(std::istream& ifs, Complex& r) { - - return ifs >> r.real >> r.im; -} diff --git a/Operator_overloading/Vector/Source.cpp b/Operator_overloading/Vector/Source.cpp deleted file mode 100644 index c2e3c70..0000000 --- a/Operator_overloading/Vector/Source.cpp +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include "Vector.h" -int main() -{ - - - Vector v1(2); - - std::cin >> v1; - - std::cout << (v1); - - -} diff --git a/Operator_overloading/Vector/Vector.cpp b/Operator_overloading/Vector/Vector.cpp deleted file mode 100644 index 5059a66..0000000 --- a/Operator_overloading/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 <<')' < 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/Operator_overloading/Vector/Vector.h b/Operator_overloading/Vector/Vector.h deleted file mode 100644 index 9026d73..0000000 --- a/Operator_overloading/Vector/Vector.h +++ /dev/null @@ -1,37 +0,0 @@ -#include -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); // Дали два вектора са перпендикулярни -- cgit v1.3.1-23-gd82d