Website Summary Files Commits Branches @commit @diff @stats
path: root / Sem. 05 / README.md
diff options
context:
space:
mode:
Commit8cf1283a4ffb9fe1901c29c087fa376de82726af (patch)
Author
 angeld55 <angel_dimitriev@abv.bg>
2022-02-19 23:30:52 +0200
Committer
 angeld55 <angel_dimitriev@abv.bg>
2022-02-19 23:30:52 +0200
Filesabdfe6bf526100dcce87a88563100e02adf7605e /Sem. 05/README.md
Object-oriented_programming_FMI-8cf1283a4ffb9fe1901c29c087fa376de82726af.tar
Object-oriented_programming_FMI-8cf1283a4ffb9fe1901c29c087fa376de82726af.tar.gz
Object-oriented_programming_FMI-8cf1283a4ffb9fe1901c29c087fa376de82726af.zip
Parentd73a7ec225516657dec74472a0491330e9999217 (diff)
clean up
1 files changed, 0 insertions, 218 deletions
-rw-r--r--Sem. 05/README.md218
diff --git a/Sem. 05/README.md b/Sem. 05/README.md
deleted file mode 100644
index d9bd067..0000000
--- a/Sem. 05/README.md
+++ /dev/null
@@ -1,218 +0,0 @@
-# Член-функции. Конструктори и деструктор. Модификатори за достъп. Капсулация.
-
-## Член-функции.
-Член-функциите са функции, които работят с член-данните на обекта от дадена структура.
- ```c++
-struct Point
-{
- int x;
- int y;
-};
-bool isInFirstQuadrant(const Point& p)
-{
- return p.x >= 0 && p.y >= 0;
-}
-int main()
-{
- Point p1 = {3, 4};
- Point p2 = {-9, 8};
- cout << isInFirstQuadrant(p1) << endl;
- cout << isInFirstQuadrant(p2) << endl;
-}
- ```
-
- Може функцията да бъде член-функция:
- ```c++
-struct Point
-{
-
- int x;
- int y
-
- bool isInFirstQuadrant()
- {
- return x >= 0 && y >= 0;
- }
-
-};
-
-int main()
-{
- Point p1 = {3, 4};
- Point p2 = {-9, 8};
- cout << p1.isInFirstQuadrant() << endl;
- cout << p2.isInFirstQuadrant() << endl;
-}
- ```
-#
-**Член-функциите**:
-
- - Работят с член-данните на класа.
- - Извикват се с обект на класа
-
- - Компилаторът преобразува всяка **член-функция** на дадена структура в
- обикновена функция с уникално име и един допълнителен параметър
- –**указател към обекта**.
-
-**Константни член-функции**:
-
- - Не променят член-данните на структурата.
- - Оказва се чрез записването на ключовата дума **const** в декларацията и в края на заглавието в дефиницията им
- - Могат да се извикват от константни обекти.
-## Конструктори и деструктор.
-
-**Жизнен цикъл на обект**:
- - Създаване на обект в даден scope – заделя се памет и член-данните се инициализират.
- - Достига се до края на скоупа(област).
- - Обектът и паметта, която е асоциирана с него се разрушава.
-
-**Конструктор**:
- - Извиква се веднъж - при създаването на обекта.
- - Не се оказва експлицитно тип на връщане (връща констатна референция).
- - Има същото име като класа.
-
- **Деструктор**:
- - Извиква се веднъж - при изтриването на обекта.
- - Не се оказва експлицитно тип на връщане.
- - Има същото име като класа със симовла '~' в началото.
-
- ```c++
-
-#include <iostream>
-
-using namespace std;
-
-
-struct Test
-{
- Test()
- {
- cout << "Object is created" <<endl;
- }
-
- ~Test()
- {
- cout << "Object is destroyed" <<endl;
- }
- int a;
- int b;
-};
-
-int main()
-{
- while ()
- {
- Test t;// Object is created
- if ()
- {
- Test t2; // Object is created
-
- }// Object is destroyed (t2)
-
- }//Object is destroyed (t)
-}
-
- ```
- ## Капсулация (encapsulation).
-Понякога искаме потребителите да **нямат достъп до всички член-данни и методи на даден клас**.
-Това е така, защото тяхната промяна може да доведе до **неочаквано поведение** на нашата програма. Принципът за **капсулация** ни помага като позволява да определим кои методи и атрибути може да използват потребителите на нашия клас.
-
- **Модификатор за достъп**:
-
-| Модификатор за достъп: | Достъп: |
-|------------------------|---------------------------------|
-| private | В текущия клас. |
-| protected | В текущия клас и *наследниците. |
-| public | За всеки |
-
-**Пример за get-ъри и set-ъри**
-
- ```c++
-
-#include <iostream>
-
-using namespace std;
-
-
-struct Student
-{
-private:
- int grade;
- int age;
-public:
- Student(int grade, int age)
- {
- setGrade(grade);
- setAge(age);
- }
- int getGrade()
- {
- return grade;
- }
- int getAge()
- {
- return age;
- }
- void setGrade(int grade)
- {
- if(grade >= 2 && grade <= 6)
- this->grade = grade;
- }
- int setAge(int age)
- {
- if(age >= 0)
- this->age = age;
- }
-};
-
-int main()
-{
- while ()
- {
- Test t;// Object is created
- if ()
- {
- Test t2; // Object is created
-
- }// Object is destroyed (t2)
-
- }//Object is destroyed (t)
-}
-
- ```
-
-
-## Задачи
-
-**Задача 1:**
-Реализирайте клас/структура интервал, който представлява интервал [a,b] (задължително а <= b) от реалната права. Нашият интервал ще бъде дискретен - началото и краят му ще бъдат цели числа и ще разглеждаме само точки, които са цели числа. Релизирайте следният интерфейс:
-
- - Подразбиращ се контруктор, който създава интервала **[0,0]**.
- - Конструктор, който приема двата параметъра. Ако a<=b, то създава интервала **[a,b]**. В противен случай, създава **[0,0]**.
- - Член-функция, която връща **дължината на интервала**.
- - Член-функция, която приема число и проверява **дали е част от интервала**.
- - Член-функция, която връща **броя на простите числа** в интервала.
- - Член-функция, която връща **броя на числата в интервала**, които са палиндорми.
- - Член-функция, която връща **броя на числата, които нямат повтарящи цифри**.
- - Член-функция, която връща дали началото и края на интервала са **степени на 2-ката**. ([2,16] - истина)
- - Член-функция, която приема интервал и връща **сечението на текущия интервал с подадения**. (Сечението на [1, 5] [3, 7] e [3, 5]).
- - Член-функция, която приема интервал и връща дали подадения (като параметър) интервал е **подинтервал на текущия**(обектът, от който се извиква функцията).
-
- **Пример за работа с класа:**
- ```c++
-
-int main()
-{
- Interval t1(3,10); // [3, 10]
- Interval t2(4,14); // [4, 14]
- Interval t3; // [0, 0]
-
- Interval result = t1.intersect(t2); // [4, 10]
-
- t2.isSuperInterval(result); //true
-
- result.calcPrimeNumbersInTheInterval() // 2 (only 5 and 7)
-}
- ```
-
-