From 8cf1283a4ffb9fe1901c29c087fa376de82726af Mon Sep 17 00:00:00 2001 From: angeld55 Date: Sat, 19 Feb 2022 23:30:52 +0200 Subject: clean up --- Sem. 06/README.md | 166 ------------------------------------------------ Sem. 06/Time/Source.cpp | 14 ---- Sem. 06/Time/Time.cpp | 78 ----------------------- Sem. 06/Time/Time.h | 27 -------- 4 files changed, 285 deletions(-) delete mode 100644 Sem. 06/README.md delete mode 100644 Sem. 06/Time/Source.cpp delete mode 100644 Sem. 06/Time/Time.cpp delete mode 100644 Sem. 06/Time/Time.h (limited to 'Sem. 06') diff --git a/Sem. 06/README.md b/Sem. 06/README.md deleted file mode 100644 index 70f3ba3..0000000 --- a/Sem. 06/README.md +++ /dev/null @@ -1,166 +0,0 @@ - -# Разделна компилация. Абстракция. Копиращ конструктор и оператор= - -## Разделна компилация. - -![enter image description here](https://gamedevunboxed.com/wp-content/uploads/2019/08/image.png) - -Една програма на С++ може да бъде разбита в множество файлове, които се **компилират независимо един от друг**, т.е. осъществява се **разделна компилация**. В резултат на компилацията се получават няколко **обектни файла** (файлове с разширение **.obj**). Изпълнимият код напрограмата (файл с разширение .ехе) се получава след свързване на обектните файлове (**Linking**). - -За да се възполваме максимално от разделната компилация, разделяме класовете на **.h** и **.cpp** файлове. Навсякъде където ще работим с класа, ще включваме **само .h файла.** По този начин, ако променим реализацията на някоя от функциите на класа, ще се **прекомпилира само този файл**. - -![enter image description here](https://i.ibb.co/N9RnMHv/sss.png) -## Абстракция -Пример за **лоша абстракция**: - -```c++ -struct Triangle -{ - int x1; - int y1; - - int x2; - int y2; - - int x3; - int y3; -}; -int getPer(const Triangle& t) -{ - return - sqrt( (t.x1-t.x2)*(t.x1-t.x2) + (t.y1-t.y2)*(t.y1-t.y2) + - sqrt( (t.x2-t.x3)*(t.x2-t.x3) + (t.y2-t.y3)*(t.y2-t.y3) + - sqrt( (t.x3-t.x1)*(t.x3-t.x1) + (t.y3-t.y1)*(t.y3-t.y1); -} - ``` - Пример за **по-добра абстракция**: - ```c++ -struct Point -{ - int x; - int y - double getDistTo(const Point& other) - { - return sqrt((x-other.x)*(x-other.x)+(y-other.y)*(y-other.y)); - } -}; -struct Triangle -{ - Point p1; - Point p2; - Point p3; -}; - -int getPer(const Triangle& t) -{ - return t.p1.getDistTo(t.p2) + t.p2.getDistTo(t.p3) + t.p3.getDistTo(t.p1); -} - ``` - -## Копиращ конструктор и оператор = -Заедно с конструктора по подразбиране и деструктора във всеки клас се дефинират и следните член-функции: - - Копиращ конструктор - конструктор, който приема обект от същия клас и създава новият обект като негово копие. - - Оператор= - функция/оператор, който приема обект от същия клас и променя данните на съществуващ обект от същия клас (обектът от който извикваме функцията. - -**Забележка:** Копиращият конструктор създава нов обект, а оператор= модифицира вече съществуващ такъв! - - ```c++ - -#include - -using namespace std; - -struct Test -{ - - Test() - { - cout << "Default constructor" < -#include "Time.h" - -using namespace std; - - -int main() -{ - Time t(12, 30, 30); - - t.print(); - t.addMinutes(45); - t.print(); -} \ No newline at end of file diff --git a/Sem. 06/Time/Time.cpp b/Sem. 06/Time/Time.cpp deleted file mode 100644 index 9cd8620..0000000 --- a/Sem. 06/Time/Time.cpp +++ /dev/null @@ -1,78 +0,0 @@ -#include "Time.h" -#include - -Time::Time() : Time(0, 0, 0){} - -Time::Time(size_t hours, size_t mins, size_t seconds) -{ - setHours(hours); - setMins(mins); - setSeconds(seconds); -} - -size_t Time::getHours() const -{ - return hours; -} -size_t Time::getMins() const -{ - return mins; -} -size_t Time::getSeconds() const -{ - return seconds; -} -void Time::setHours(size_t hours) -{ - if (hours >= 24) - hours = 0; - this->hours = hours; -} -void Time::setMins(size_t mins) -{ - if (mins > 59) - mins = 0; - this->mins = mins; -} -void Time::setSeconds(size_t seconds) -{ - if (seconds > 59) - seconds = 0; - this->seconds = seconds; -} -void Time::print() -{ - std::cout << hours << ":" << mins << ":" << seconds << std::endl; -} - -void Time::addSeconds(size_t seconds) -{ - size_t currentTimeSeconds = convertTimeToSeconds(); - - currentTimeSeconds += seconds; - - setTimeBySeconds(currentTimeSeconds); - -} -void Time::addMinutes(size_t minutes) -{ - addSeconds(60 * minutes); -} -void Time::addHours(size_t hours) -{ - addMinutes(60 * hours); -} -size_t Time::convertTimeToSeconds() -{ - return hours * 3600 + mins * 60 + seconds; -} -void Time::setTimeBySeconds(size_t seconds) //12000 -{ - hours = seconds / 3600; - seconds %= 3600; - - mins = seconds / 60; - seconds %= 60; - - this->seconds = seconds; -} \ No newline at end of file diff --git a/Sem. 06/Time/Time.h b/Sem. 06/Time/Time.h deleted file mode 100644 index 3789910..0000000 --- a/Sem. 06/Time/Time.h +++ /dev/null @@ -1,27 +0,0 @@ -class Time -{ - size_t hours; - size_t mins; - size_t seconds; - - size_t convertTimeToSeconds(); - void setTimeBySeconds(size_t); - -public: - Time(); - Time(size_t hours, size_t mins, size_t seconds); - - - size_t getHours() const; - size_t getMins() const; - size_t getSeconds() const; - void setHours(size_t hours); - void setMins(size_t mins); - void setSeconds(size_t seconds); - - void addSeconds(size_t seconds); - void addMinutes(size_t seconds); - void addHours(size_t seconds); - - void print(); -}; -- cgit v1.3.1-23-gd82d