diff options
4 files changed, 0 insertions, 285 deletions
| -rw-r--r-- | Sem. 06/README.md | 166 | ||||
| -rw-r--r-- | Sem. 06/Time/Source.cpp | 14 | ||||
| -rw-r--r-- | Sem. 06/Time/Time.cpp | 78 | ||||
| -rw-r--r-- | Sem. 06/Time/Time.h | 27 |
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 @@ -
-# Разделна компилация. Абстракция. Копиращ конструктор и оператор=
-
-## Разделна компилация.
-
-
-
-Една програма на С++ може да бъде разбита в множество файлове, които се **компилират независимо един от друг**, т.е. осъществява се **разделна компилация**. В резултат на компилацията се получават няколко **обектни файла** (файлове с разширение **.obj**). Изпълнимият код напрограмата (файл с разширение .ехе) се получава след свързване на обектните файлове (**Linking**).
-
-За да се възполваме максимално от разделната компилация, разделяме класовете на **.h** и **.cpp** файлове. Навсякъде където ще работим с класа, ще включваме **само .h файла.** По този начин, ако променим реализацията на някоя от функциите на класа, ще се **прекомпилира само този файл**.
-
-
-## Абстракция
-Пример за **лоша абстракция**:
-
-```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(); -}; |
