Professional Documents
Culture Documents
2 Об'єктно орієнтований підхід, inline та const методи
2 Об'єктно орієнтований підхід, inline та const методи
програмування
Максим Михайлович Древаль
m.dreval@kpi.ua
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 1
У попередній серії…
Складність
алгоритми алгоритми
… поліноміальної складності … експоненційної складності …
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 2
У попередній серії…
Процес розробки програмного забезпечення
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 3
У попередній серії…
Об’єктно-орієнтований підхід
клас об’єкт
класифікація
специфікатори функцій-членів
доступу
конструктори
public деструктор
інтерфейс класу за замовчуванням
protected селектори
з параметрами
private модифікатори
копіювання
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 4
Як написати
неперевершений код першої лабки?
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 5
Inline-функції
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 6
Inline-функції
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 7
Inline-функції
class Student {
int rollNo;
public:
void setRollNo(int aRollNo){
…
rollNo = aRollNo;
}
};
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 8
Inline-функції
class Student {
…
public:
inline void setRollNo(int aRollNo);
};
void Student::setRollNo(int aRollNo){
…
rollNo = aRollNo;
}
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 9
Inline-функції
class Student {
…
public:
void setRollNo(int aRollNo);
};
inline void Student::setRollNo(int aRollNo) {
…
rollNo = aRollNo;
}
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 10
Inline-функції
class Student {
…
public:
inline void setRollNo(int aRollNo);
};
inline void Student::setRollNo(int aRollNo) {
…
rollNo = aRollNo;
}
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 11
Inline-функції
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 12
Вказівник this
class Student {
int rollNo;
char *name;
float GPA;
public:
int getRollNo();
void setRollNo(int aRollNo);
…
};
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 13
Вказівник this
Function Space
getRollNo(), …
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 14
Вказівник this
s2(rollNo,…)
Function Space
getRollNo(), … s3(rollNo,…)
s1(rollNo,…)
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 15
Вказівник this
➢ Пам’ять, виділена під функції, є спільною для кожної змінної типу
Student
s1 s2 s3 s4
rollNo, … rollNo, … rollNo, … rollNo, …
Function Space
getRollNo(), …
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 16
Вказівник this
s1 s2 s3 s4
rollNo, … rollNo, … rollNo, … rollNo, …
address address address address
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 17
Вказівник this
void Student::setName(char *)
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 18
Вказівник this
Student::Student() {
rollNo = 0;
}
Student::Student(){
this->rollNo = 0;
}
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 19
Вказівник this
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 20
Вказівник this
int main() {
Student aStudent;
Student bStudent;
bStudent = aStudent.setName(“Petryk”);
…
bStudent = aStudent.setName(“Ali”).setRollNo(2);
return 0;
}
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 21
Const-функції
➢ Серед функцій-членів класу можуть бути функції, призначені лише для
читання (read-only)
Оголошення
class ClassName {
ReturnVal Function() const;
};
Реалізація
ReturnVal ClassName::Function() const {
…
}
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 22
Const-функції
class Student {
public:
int getRollNo() const {
return rollNo;
}
};
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 23
Const-функції
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 24
Const-функції
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 25
Const-функції
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 26
Const-функції
class Date {
public:
Date() const {} // stupid error…
~Date() const {} // stupid error…
};
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 27
Const-функції
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 28
«Роздільна» компіляція
Student.h Student.cpp
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 29
«Роздільна» компіляція
Student.h
class Student {
int rollNo;
public:
void setRollNo(int aRollNo);
int getRollNo();
…
};
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 30
«Роздільна» компіляція
Student.cpp
#include “student.h”
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 31
«Роздільна» компіляція
Human.cpp
#include “student.h”
int main(){
Student aStudent;
}
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 32
Ну коли ми будемо програмувати?
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 33
Короткий приклад
#include <iostream>
#include <ctime>
class Date {
private:
int d;
int m;
int y;
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 34
Короткий приклад
public:
Date () {
time_t now = time(0);
tm *ltm = localtime(&now);
d = ltm->tm_mday;
m = 1+ ltm->tm_mon;
y = 1900 + ltm->tm_year;
}
Date (int D, int M, int Y) {
// if ...
d = D;
m = M;
y = Y;
}
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 35
Короткий приклад
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 36
Короткий приклад
int main()
{
cout << "Hello world!" << endl;
Date a;
Date b (10, 21, 20321323);
Date c (b);
a.output();
b.output();
c.output();
return 0;
}
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 37
Далі буде… ☺
Об’єктно-орієнтоване програмування (2020/21) М.М. Древаль / ІПСА НТУУ «КПІ ім. І.Сікорського» // m.dreval@kpi.ua 38