Функції С++ мають два обмеження: аргументи передаються як значення і втрачають зв’язок з початковими даними, функція може повертати тільки одне значення. Для подолання цих обмежень можна використовувати вказівники або посилання. Синтаксис використання вказівників відрізняється від синтаксису використання посилань, але результат буде однаковий – замість копії об’єкту програми, яка існує в області видимості функції, в функцію буде переданий реальний ісходний об’єкт.
#include <iostream>
using namespace std;
void swap1( int * a, int * b ) {
int t = *a;
*a = *b;
*b = t;
}
void swap2( int & a, int & b ) {
int t = a;
a = b;
b = t;
}
int main() {
int x = 3, y = 4;
swap1( &x, &y );
swap2( x, y );
}
Якщо в функцію необхідно передавати великий за розміром або складністю об’єкт, то витрати часу і пам'яті на створення його копії можуть бути значними. Тому передача в функцію посилання на такий об’єкт є більш ефективним. Якщо всередині функції об’єкт змінювати не треба, можна використовувати посилання на константні об’єкти.
#include <iostream>
using namespace std;
struct student {
int id;
int rating;
};
void show1( student s ) {
cout << s.id << " : " << s.rating << endl;
}
void show2( student * s ) {
cout << s->id << " : " << s->rating << endl;
}
void show3( student & s ) {
cout << s.id << " : " << s.rating << endl;
}
void show4( const student & s ) {
cout << s.id << " : " << s.rating << endl;
}
int main() {
student s = { 1, 95 };
show1( s );
show2( &s );
show3( s );
show4( s );
}
В функції 3 можна змінювати значення полей структури студент, і ці зміни будуть впливати на оригінал цієї структури. В функції 4 такі зміни заборонені.
Курс лекцій
з предмету «Об’єктно орієнтоване програмування»
Частина 1 – «Об’єктно орієнтоване програмування в мові Паскаль»
Зміст
Вступ. Загальний опис об’єктно-орієнтованого програмування
Тема 1 Об’єктно-орієнтоване програмування в Pascal. Означення об’єкту, його поля і методи.
Тема 2 Об’єктно-орієнтоване програмування в Pascal. Успадковування. Інкапсуляція
Тема 3 Об’єктно-орієнтоване програмування в Pascal. Віртуалізація методів
Тема 4 Об’єктно-орієнтоване програмування в Pascal. Таблиця віртуальних методів. Переваги і недоліки віртуальних методів.
Тема 5. Об’єктно-орієнтоване програмування в Pascal. Вказівники і динамічна пам’ять
Тема 6 Об’єктно-орієнтоване програмування в Pascal. Вказівники, динамічна пам’ять та об’єкти
Тема 7 Об’єктно-орієнтоване програмування в Pascal. Поняття про динамічні методи. Таблиця віртуальних методів і таблиця динамічних методів.
Тема 8 Об’єктно-орієнтоване програмування в Delphi
Вступ. Загальний опис об’єктно-орієнтованого програмування
Структурне програмування
Процедурні мови
Недоліки структурного програмування
Неконтрольований доступ до даних
Моделювання реального світу
Об’єктно орієнтований підхід
Характеристики об’єктно орієнтованих мов
Об’єкти
Класи
Успадковування
Повторне використання коду
Типи даних користувача
Поліморфізм і перезавантаження
Підсумок
Питання по темі
Розвиток об’єктно-орієнтованого методу обумовлений обмеженістю раніше розроблених методів програмування. Щоб оцінити значення ООП, необхідно розібратися, в чому полягає ця обмеженість і як вона проявляється в традиційних мовах програмування.