Website Summary Files Commits Branches @commit @diff @stats
path: root / Sem. 06
diff options
context:
space:
mode:
4 files changed, 0 insertions, 285 deletions
-rw-r--r--Sem. 06/README.md166
-rw-r--r--Sem. 06/Time/Source.cpp14
-rw-r--r--Sem. 06/Time/Time.cpp78
-rw-r--r--Sem. 06/Time/Time.h27
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 <iostream>
-
-using namespace std;
-
-struct Test
-{
-
- Test()
- {
- cout << "Default constructor" <<endl;
- }
-
- Test(const Test& other)
- {
- cout << "Copy constructor" <<endl;
- }
-
- Test& operator=(const Test& other)
- {
- cout << "operator=" <<endl;
- }
-
- ~Test()
- {
- cout << "Destructor" <<endl;
- }
-};
-
-void f(Test object)
-{
- //do Stuff
-}
-
-
-void g(Test& object)
-{
- //do Stuff
-}
-int main()
-{
- Test t; //Default constructor;
-
- Test t2(t) // Copy constructor
- Test t3(t2) // Copy constructor
- Test t2 = t3 // operator=
- Test t3 = t // operator=
-
- Test newTest = t; //Copy constructor !!!!!!!
-
- f(t); // Copy constructor
- g(t); // nothing. We are passing it as a reference. We are not copying it!
-
- Test* ptr = new Test(); // Default constructor // we create a new object in the dynamic memory. The destructor must be invoked explicitly (with delete)
-
- delete ptr; // Destructor
-
-} //Destructor Destructor Destructor Destructor
-
- ```
-
-## Задачи
-
-**Задача 1:**
-Реализирайте клас **Time**, който ще се използва за работа с часове (13:05:45).
-Вашият клас трябва да има следния интерфейс:
-
- - Подразбиращ се контруктор, който създава часа на **00:00:00**.
- - Конструктор, който приема три параметъра - **час, минути и секунди**.
- - Член-функция, която **добавя/изважда** часове.
- - Член-функция, която **добавя/изважда** минути.
- - Член-функция, която **добавя/изважда** секунди.
- - Член-функция, която връща оставащото време до **полунощ**.
- - Член-функция, която връща дали е **време за вечеря**. В рамките на задачата време за вечеря е между **20:30** и **22:00**.
- - Член-функция, която връща дали е **време за парти**. В рамките на задачата време за парти е между **23:00** и **06:00**.
- - Член-функция, която приема друг обект от тип **Time** и връща обект от тип **Time**, което е разликата между двете времена.
- - Член-функция, която която приема друг обект от тип **Time** и сравнява двата обекта (по-къснен/по-ранен)
-
-
-
- ```c++
-
-int main()
-{
- Time t(12,30,45); //12:30:45
- Time t2; //00:00:00
-
- t.addSeconds(15); //12:31:00
- t.addMinutes(29); // 13:00:00;
-
- t.isPartyTime(); // false
-
- Time result = t.timeToMidnight(); // 11:00:00
-
- t2.compareTo(t); //some value that indicates that t2 < t
-}
- ```
-
-
diff --git a/Sem. 06/Time/Source.cpp b/Sem. 06/Time/Source.cpp
deleted file mode 100644
index e4dd497..0000000
--- a/Sem. 06/Time/Source.cpp
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <iostream>
-#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 <iostream>
-
-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();
-};