diff options
feat(Week09): Add solutions
1 files changed, 59 insertions, 0 deletions
| -rw-r--r-- | Week09/Exercise02/Vector.h | 59 |
diff --git a/Week09/Exercise02/Vector.h b/Week09/Exercise02/Vector.h new file mode 100644 index 0000000..bf7b0c3 --- /dev/null +++ b/Week09/Exercise02/Vector.h @@ -0,0 +1,59 @@ +#ifndef _VECTOR +#define _VECTOR + +class Vector { + double* numbers; + unsigned numbersCount; + unsigned numbersAlloc; + + void free(); + void copyFrom(const Vector& other); + +public: + Vector(); + ~Vector(); + Vector(const Vector& other); + Vector& operator=(const Vector& other); + + Vector(Vector&& other); + Vector& operator=(Vector&& other); + + unsigned GetCount() const; + const double* GetNumbers() const; + + // Добра конвенция при бинарни (двуаргументни) оператори е да + // дефинираме като член-функции съответните _= оператори (+=, -=, ...) + // и след това да дефинираме _ опеарторите (+, -, ...) като нормални + // функции, които вътрешно използват _= + + Vector& operator+=(const Vector& other); + Vector& operator-=(const Vector& other); + Vector& operator*=(double scalar); + double operator*=(const Vector& other); + Vector& operator^=(const Vector& other); + + double operator&() const; + + // Понеже предефинираме &, не можем да направим &vector, за да + // вземем указател от референция към обект. За нашите цели е нужно, + // затова си правим помощни методи които "реимплементират" същата логика. + Vector* ptr(); + const Vector* ptr() const; +}; + +Vector operator+(const Vector& lhs, const Vector& rhs); +Vector operator-(const Vector& lhs, const Vector& rhs); + +// Понеже лявия и десния аргумент се различават по тип, +// така поддържаме комутативност +Vector operator*(const Vector& lhs, double scalar); +Vector operator*(double scalar, const Vector& rhs); + +double operator*(const Vector& lhs, const Vector& rhs); +Vector operator^(const Vector& lhs, const Vector& rhs); + +bool operator||(const Vector& lhs, const Vector& rhs); +bool operator==(const Vector& lhs, const Vector& rhs); +bool operator!=(const Vector& lhs, const Vector& rhs); + +#endif /* _VECTOR */ |
