До питання конструювання класів з конструкторами різного типу
Розробка декількох програм на мові C++ на базі класів з різними типами конструкторів. Дослідження основних питань передачі об'єктів з головної функції в підпрограми-функції і навпаки. Приведення та опис кодів запропонованих програмних розробок.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | статья |
Язык | украинский |
Дата добавления | 30.10.2020 |
Размер файла | 19,0 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
2
ДО ПИТАННЯ КОНСТРУЮВАННЯ КЛАСІВ З КОНСТРУКТОРАМИ РІЗНОГО ТИПУ
Пех Петро Антонович., к.т.н., доцент
Костюк Юрій Юрійович, студент Кравченко Максим Богданович, студент Луцький національний технічний університет
Пех П.А., Костюк Ю.Ю., Кравченко М.Б. До питання конструювання класів з конструкторами різного типу.
В статті запропоновано кілька програм мовою C++ на базі класів з різними типами конструкторів. Досліджуються також питання передачі об'єктів з головної функції у підпрограми-функції і навпаки. Наведені коди запропонованих програм.
Ключові слова: клас, функція, формальний параметр, конструктор з параметрами, конструктор копіювання
Пех П.А., Костюк Ю.Ю., Кравченко М.Б. К вопросу конструироавния классов с конструкторами различных типов. В статье предложены несколько программ на языке C++ на базе классов с различными типами конструкторов. Исследуются также вопросы передачи объектов с главной функции подпрограммам-функциям и наоборот. Приведены коды предложенных программ.
Ключевые слова: класс, функция, формальный параметр, конструктор с параметрами, конструктор копирования
Pekh Petro, Kostyuk Yuri, Kravchenko Maxim. On the question of designing classes with constructors of different types. The article proposes several C ++ language programs based on classes with different types of constructors. The transfer of objects from the main function to the subroutines-functions and vice versa is also investigated. The codes of the offered programs are resulted.
Keywords: class, function, formal parameter, constructor with parameters, copy constructor
програмна розробка конструктор передача функції
Постановка задачі. Загальновідомо, що програми мовою C++ найчастіше розробляються на базі класів [1,2,4,7,8]. Клас є фундаментальним поняттям мови C++. Класи опрацьовують дані за допомогою методів [3,5]. Однією з функцій класу є конструктор. Саме конструктор є функцією, за якою програми створюють об'єкти даного класу і виконують їх попередні налаштування [4,6]. Конструктори бувають різних типів. Задача полягає у дослідженні дії різного типу конструкторів на дані класу.
Метою нашого дослідження було розроблення засобами мови C++ комплексу програм на базі класів з різними типами конструкторів.
Новизна полягає у підході до вирішення проблеми з позицій об'єктно -орієнтованого програмування [1,4,6].
Основна частина. Оскільки під час розробки класів використовуються конструктори різних типів - конструктор за замовчуванням, конструктори з одним, двома або більшою кількістю параметрів, конструктор копіювання, ми розробили комплекс програм, частина яких пропонується в даній статті для всебічного дослідження даногопитання. Крім того, ми досліджували процес передачі об'єктів з головної функції у функції-підпрограми і навпаки.
Програма, код якої наведений нижче, розроблена на базі класу PlanePoint, вирішує досить просту задачу. Вона дозволяє ввести координати x, y довільної точки M (x,y) площини і обчислити віддаль від цієї точки до точки початку координат O(0,0) . Ми передбачили у програмі три конструктори: конструктор без параметрів PlanePoint(void), конструктор з двома параметрами PlanePoint(double nx, double ny) та конструктор копіювання PlanePoint(PlanePoint &ref_Point). КласPlanePoint маєдвавласніметоди: int GetX(void){return x;} таint GetY(void){return y;}, здопомогоюякихможнаотриматизначеннякоординатx,y довільноїточкиМ площини. Функціяdouble GetLength(PlanePoint tmp) неналежитьдометодівкласуPlanePoint, томувонаєзовнішньоюповідношеннюдокласуфункцією. Родзинкоюєте, щоцяфункціямаєуякостіформальногопараметраоб'єктtmp класуPlanePoint ізйогодопомогоюпередаютьсякоординатиточкиМ.
Після запуску програми на виконання спочатку спрацьовує конструктор з двома параметрами під час виконання команди PlanePoint Ob1(5,8), який створює об'єкт Ob1 з парметрами
x=5,y=8, а потім під час виконання команди PlanePointOb2 спрацьовує конструктор без
параметрів, який створює об'єкт Obi з парметрами x=7,y=21. Процес контролюємо шляхом виведення на екран значень абсцис обох об'єктів за допомогою методу GetX(). Далі виконується команда побітового копіювання об'єктів Ob2 = Obi. Тут конструктор копієвання не використовується, оскільки обидва об'єкти вже існували. Процес побітового копіювання об'єктів контролюємо виведенням на екран абсциси точки x=5 за допомогою методу GetX() . Конструктор копіювання спрацьовує під час виконання команди PlanePoint Ob3 = Obi, яка забезпечує створення нового об'єкта Ob3 і копіювання у нього значень x=5,y=8 об'єкта Obi, у чому переконуємося шляхом виведення на екран значення x=5, отриманого методом Ob3.GetX() . Далі команда PlanePoint Ob4(5,5) створює об'єкт Ob4, а команда len = GetLength(Ob4) передасть цей об'єкт з головної функції у зовнішню функцію double GetLength(PlanePoint tmp) , яка обчислить і передасть у змінну len головної функції значення віддалі від точки M(5,5) до точки O(0,0). Головна функція виведе це значення на екран.
#include <iostream.h>
#include <conio.h>
#include <math.h>
#include <windows.h>
// класPlanePoint class PlanePoint { double x, y; public :
// конструктор класу без параметрів:
PlanePoint(void);
// конструктор класу з двома параметрами:
PlanePoint(double nx, double ny);
// конструкторкопіюваннякласуPlanePoint - // передаєтьсяпосиланнянаоб'єкткласуPlanePoint:
PlanePoint(PlanePoint &ref Point);
// методи, реалізованівкласіint GetX(void) { return x; }; int GetY(void) { return y; };
};
PlanePoint:: PlanePoint(void) { x =7; y = 21;}
PlanePoint:: PlanePoint(double nx, double ny) { x = nx; y = ny;}
PlanePoint:: PlanePoint(PlanePoint & ref Point) {
// створенняновогооб'єктатакопіюванняданихвньогоx= refPoint.x; y = refPoint.y;}
// зовнішняфункція, щообчислюєвідстаньвідточки // зкоординатамиtx, tyдопочаткукоординат // об'єктPlanePointmp євхіднимпараметромфункціїdouble GetLength(PlanePoint tmp); int main() { clrscr();
SetConsoleCP(1251);
SetConsoleOutputCP(1251); int d; double len;
// створення об'єкта Ob1 за допомогою конструктора PlanePointOb1(5, 8);
// створення об'єкта Ob2 - викликається // конструктор за замовчуванням PlanePointOb2;
// Перевірка роботи конструкторів d= Ob1.GetX();
cout<<"\nПрацює функція Ob1.GetX():";
cout<<"\n Абсциса точки об\'єкта Ob1 дорівнює "<<d<<endl; cout<<"\n Натисніть будь-яку клавішу, щоб продовжити...\n"; getch (); d = Ob2.GetX();
cout<<"\n Працює функція Ob2.GetX():";
cout<<"\n Абсциса точки об\'єкта Ob2 дорівнює "<<d<<endl; cout<<"\n Натисніть будь-яку клавішу, щоб продовжити...\n"; getch();
// Побітове копіювання: конструктор копіювання не викликається Ob2 = Obi;
// дані скопіювались, але не за допомогою // конструктора копіювання
d = Ob2.GetX();
cout<<"\n Працює функція Ob2.GetX():"; cout<<"\n після побітового копіювання Ob2 = Obi:"; cout<<"\n Абсциса точки об\'єкта Ob2 дорівнює "<<d<<endl; cout<<"\n Натисніть будь-яку клавішу, щоб продовжити...\n"; getch ();
// Код, що викликає до роботи конструктор копіювання PlanePoint Ob3 = Obi;
// Створюється новий об'єкт Ob3 // і в нього копіюється об'єкт Obi,
// для чого викликається конструктор копіювання d = Ob3.GetX();
cout<<"\n Працює функція Ob3.GetX() після ";
cout<<"\n виклику конструктора копіювання PlanePoint Ob3 = Obi"; cout<<"\n Абсциса точки об\'єкта Ob3 дорівнює "<<d<<endl; cout<<"\n Натисніть будь-яку клавішу, щоб продовжити...\n"; getch();
PlanePoint Ob4(5,5);
// оголошено об'єкт Ob4 - екземпляр класу PlanePoint // передача об'єкта Ob4 у функцію GetLength,
// викликається конструктор копіювання len = GetLength(Ob4);
cout<<"\n Працює конструктор копіювання PlanePoint tmp, який"; cout<<"\n створює об'єкт tmp і копіює його параметри в об'єкт Ob4"; cout<<"\n функції GetLength(Ob4), що обчислює віддаль між точками."; cout<<"\n Віддаль від точки Ob4(5,5) до початку координат:";
cout<<"\n len = "<<len<<endl;
cout<<"\n Розв'язок задачі завершено!"<<endl;
getch();
return 0;
}
// зовнішняфункціяGetLength(PlanePoint tmp) double GetLength(PlanePoint tmp) { double length; double tx, ty; tx = tmp.GetX(); ty = tmp.GetY();
length = pow((tx*tx + ty*ty),1./2.); return length;}
Результати тестування програми:
Працює функція Ob1.GetX():
Абсциса точки об'єкта Ob1 дорівнює 5 Натисніть будь-яку клавішу, щоб продовжити... Працює функція Ob2.GetX():
Абсциса точки об'єкта Ob2 дорівнює 7 Натисніть будь-яку клавішу, щоб продовжити... Працює функція Ob2.GetX(): після побітового копіювання Ob2 = Ob1:
Абсциса точки об'єкта Ob2 дорівнює 5
Натисніть будь-яку клавішу, щоб продовжити...
Працює функція Ob3.GetX() після
виклику конструктора копіювання PlanePointOb3 = Ob1 Абсциса точки об'єкта Ob3 дорівнює 5 Натисніть будь-яку клавішу, щоб продовжити...
Працює конструктор копіювання PlanePoint, який створює об'єкт tmpі копіює в нього дані об'єкта Ob4.
Функція GetLength(Ob4)обчислює віддаль між точками.
Віддаль від точки Ob4(5,5) до початку координат: len= 7.07107
Розв'язок задачі завершено!
Програма, код якої подано нижче, розроблена на базі класу Personз конструктором за замовчуванням - він у програмі не згадується - та двох зовнішніх функцій voidrename (Person&x, strings) та voidprint(constPerson&x) . Як бачимо з прототипів обох функцій, вони в якості формального параметра мають посилання на об'єкт класу Person. У цій програмі потрібно змінити одне ім'я персони на інше.
Після запуску програми на виконання команда Personobстворює об'єкт ob, а команда ob.name="Петро" задає ім'я персони. Команда виклику зовнішньої функції rename (ob, s) передає об'єкт obу зовнішню функцію voidrename(Person&x, strings), яка змінить ім'я персони на інше і поверне його у головну функцію. Команда виклику зовнішньої функції print(ob) передає об'єкт obу зовнішню функцію voidprint (constPerson&x) , яка виведе змінене ім'я персони на екран.
#include <string>
#include <iostream.h>
#include <conio.h>
#include <windows.h> using namespace std; class Person { public:
string name;
};
// Функції, щоневходятьвкласPerson void rename(Person &x, string s); void print(const Person &x); int main() { clrscr();
SetConsoleCP(1251);
SetConsoleOutputCP(1251); strings;
// Заданняіменіперсонизадопомогою // об'єктаobкласуPerson
cout<<"\nЗаданняіменіперсонизадопомогою"; cout<<"\nоб'єктаobкласуPerson: \n";
Person ob;
ob.name="Петро";
print(ob);
cout<<"\nНатиснітьбудь-якуклавішу, щобпродовжити...\n"; getch();
// Змінаіменіперсонизадопомогою
// зовнішньоїфункціїrename(ob, s):
cout<<"\nЗміна імені персони за допомогою";
cout<<"\n зовнішньоїфункціїrename(ob, s):\n";
s= "Микола";
rename(ob, s);
print(ob);
cout<<"\nРозв'язокзадачізакінчено!\n"; getch(); return 0;
}
void rename(Person &x, string s) {
x.name = s;
};
void print(const Person &x){
cout<<"\n "<<x.name<<endl;
};
Результати тестування програми:
Задання імені персони за допомогою об'єкта obкласу Person:
Петро
Натисніть будь-яку клавішу, щоб продовжити...\
Зміна імені персони за допомогою зовнішньої функції rename(ob, s):
Микола
Розв'язок задачі закінчено!\
Програма, код якої подано нижче, також розроблена на базі класу Personз конструктором за замовчуванням та двох зовнішніх функцій Personcreate1() та Personcreate2() . кожна з яких має такий самий тип, як і клас. Це означає, що ці дві функції повертають об'єкти. Як бачимо з прототипів обох функцій, вони не мають формальних параметрів. Призначення першої функції полягає у тому, що вона повертає об'єкт з порожніми (обнуленими) полями. Призначення другої функції полягає у тому, що вона повертає об'єкт з наперед заданими полями. У цій програмі потрібно обнулити або ж задати ім'я персони.
Післязапуску#include <string>
#include <iostream.h>
#include <conio.h>
#include <windows.h> using namespace std; class Person { public:
string name;
};
// Функції, щоневходятьвкласPerson Person create1();
Person create2(); int main() { clrscr();
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
// Заданняіменіперсонизадопомогою// об'єктаobкласуPersonPersonob; ob.name="Peter";
cout<<"\nЗаданняіменіперсонизадопомогою"; cout<<"\nоб'єктаobкласуPerson: \n"; cout<<" ob.name="<<ob.name<<endl;
cout<<"\nНатиснітьбудь-якуклавішу, щобпродовжити...\n"; getch();
// Переданооб'єкткласуPersonзобнуленимиполямиcout<<"\nПереданооб\'єкткласуPerson"; cout<<"\nзобнуленимиполями:"<<endl; ob=create1();
cout<<" ob.name="<<ob.name<<endl;
cout<<"\nНатиснітьбудь-якуклавішу, щобпродовжити...\n"; getch();
// Передано об'єкт tmpкласу Personз визначеними // у функції create2() полями
cout<<"\nПередано об\'єкт tmpкласу Personз визначеними "; cout<<"\nу функції create2() полями:"<<endl;
ob=create2();
cout<<" ob.name="<<ob.name<<endl; cout<<"\n Розв'язокзадачізакінчено!\n"; getch(); return 0;
}
// Функціяcreate1 повернечерезсвоєім'я // об'єкткласуPersonзобнуленимиполямиPersoncreate1() { returnPerson();
};
// Функціяcreate2 повернечерезсвоєім'я // об'єктtmpкласуPersonзвизначеними // утіліфункціїполямитаїхзначеннямиPersoncreate2() {
Person tmp; tmp.name = "Paul"; return tmp;
};
Результати тестування програми:
Задання імені персони за допомогою об'єкта obкласу Person: ob.name=Peter
Натисніть будь-яку клавішу, щоб продовжити...
Передано об'єкт класу Personз обнуленими полями: ob.name=
Натисніть будь-яку клавішу, щоб продовжити...
Передано об'єкт tmpкласу Personз визначеними
уфункціїcreate2() полями:
ob.name=Paul
Розв'язок задачі закінчено!
Висновок
В статті запропоновано комплекс програм мовою C++, за допомогою яких досліджується робота конструкторів різних типів на дані класу. Проблема вирішується з позицій об'єктно-орієнтованого програмування Наведені коди запропонованих програм та результати їх тестування
Список бібліографічного опису
1.Архангельский А.Я. Программирование в C++ Builder- М.: ООО "Бином-Пресс", 2010. - 896 с.
2.Архангельский А.Я. Язык C++ в C++Builder. Справочное и методическое пособие -М: Бином, 2007. - 1012 с.
3.Бобровский С. Самоучитель программирования на языке C++ в системе BorlandBuilder5.0. -М.: ДЕСС КОМ, I-PRESS, 2000. -272 с.
4.Браян В. Керніган, Денс М. Річі Мова програмування мовою С++. -Київ: КНЕУ, 2014. - 232 с.
5.Глинський Я.М., Анохін В.Є., Ряжська В.А. C++ і C++Builder - Львів:СПД Глинський, 2011. - 192 с.
6.Грицюк Ю.І., Рак Т.Є. Програмування мовою С++. - Львів: ЛБУ БЖД, 2011. - 292 с.
7.Дейтел Х.М., Дейтел П.Дж. Как программировать на С++. -М.: М.: ООО "Бином-Пресс'', 201. - 1456с.
8.В. Ермолаев, Т. Сорока C++ Builder: Книга рецептов. -КУДИЦ-Образ, 2006.-208с.
References
1.Arkhangelsk A.Y. Programming in C ++ Builder - M .: Binom-Press LLC, 2010. - 896 p.
2.Arkhangelsk A.Y. C ++ language in C ++ Builder. Reference and methodological manual -M: Binom, 2007. - 1012 p.
3.Bobrovsky S. Tutorial programming in C ++ in the Borland Builder 5.0 system. -M .: DESS COM, I-PRESS, 2000. -272 p.
4.Brian V. Kermgan, Dance M. Richi Mova program my C ++. -Kiev: KNEU, 2014. - 232 p.
5.Glinsky Ya.M., Anokhin V©., Ryazhska V.A. C ++ і C ++ Builder - Lviv: SPD Glinsky, 2011 .-- 192 p.
6.Gritsyuk Yu.I., Cancer Т.Є. Programming my C ++. - Lviv: LBU BZD, 2011 .-- 292 p.
7.Daytel H.M., Daytel P.J. How to program in C ++. -M .: M .: Binom-Press LLC, 201. - 1456s.
8.V. Ermolaev, T. Soroka C ++ Builder: Recipe Book. - - KUDIC - Obraz, 2006.-208s.
Размещено на Allbest.ru
...Подобные документы
Розробка та дослідження алгоритмів і програм кодування даних з виявленням помилок на основі циклічних CRC-кодів. Аналіз циклічних кодів. Розробка та тестування програмних модулів. Розрахунок економічних показників. Вирішення питань охорони праці.
дипломная работа [5,4 M], добавлен 22.06.2010Принципи об'єктно-орієнтованого підходу. Розробка програмного комплексу з використанням цього алгоритму і користувальницьких класів на мові програмування С++. Реалізація простого відкритого успадкування. Тестування працездатності системи класів.
курсовая работа [98,0 K], добавлен 06.05.2014Характеристика і функції телефонних довідників. Визначення об'єктів і класів і залежностей (зв'язків) між ними. Побудова діаграми ієрархії класів. Реалізація програми в середовищі Borland Delphi. Її інтерфейс і демонстрація можливостей. Тестовий приклад.
курсовая работа [349,3 K], добавлен 25.01.2016Дослідження основних завдань та алгоритму роботи програм копіювання файлів: "COPY1.С" (функції роботи з file handles) та "COPY2.С" (функції потокового вводу-виводу). Повний розбір роботи обох кодів програм, їх тестування, модифікація та оптимізація.
лабораторная работа [23,4 K], добавлен 04.04.2011Редагування за допомогою текстового редактора NotePad вхідного файлу даних. Програмна реалізація основного алгоритму з використанням засобів об'єктно-орієнтованого програмування. Об’ява та опис класів і об'єктів. Розробка допоміжних програмних засобів.
курсовая работа [69,4 K], добавлен 14.03.2013Ключові поняття мови об’єктно-орієнтованого програмування C++: інкапсуляція, наслідування, абстракція, поліморфізм. Об’ява класів у мові С++. Графічні засоби. Пошук відстані між точками. Опис класів і об’єктів. Програма графічної задачі. Лістинги файлів.
курсовая работа [144,3 K], добавлен 14.03.2013Знаходження площі фігури методом трапеції. Обчислення площ криволінійних трапецій. Геометричний сенс чисельника. Розробка програми для демонстрації нижчезазначеної математичної функції. Використання базових бібліотек класів, написаних на мові С++.
курсовая работа [1,0 M], добавлен 24.12.2013Проектування ієрархії класів побутових приладів (пральна машина, пилосос, телевізор, магнітофон, радіоприймач, музичний центр), створення її структурної схеми. Розробка програми з використанням об'єктів створених класових типів на мові програмування Java.
лабораторная работа [451,0 K], добавлен 25.01.2014Концепції об'єктно-орієнтованого програмування. Методи створення класів. Доступ до методів базового класу. Структура даних, функції. Розробка додатку на основі діалогових вікон, програми меню. Засоби розробки програмного забезпечення мовами Java та С++.
курсовая работа [502,5 K], добавлен 01.04.2016Загальна характеристика та особливості програмування сучасних систем автоматизованого проектування. Порівняльна характеристика середовищ розробки прикладних програм на мові JAVA. Ознайомлення з принципами і особливостями роботи певних класів, компонентів.
курсовая работа [2,0 M], добавлен 31.01.2014Розробка методу-члену класу для створення нового одновимірного масиву з кількості всіх негативних елементів кожного рядка заданого двовимірного динамічного масиву. Особливість виводу змісту масиву на екран. Аналіз перевірки правильності роботи програми.
лабораторная работа [131,2 K], добавлен 18.11.2021Використання математичного сопроцесора або його емулятора при програмуванні на мові асемблера з використанням дробових чисел. Створення програми на мові ASM-86, яка реалізує функції [x], {x}, |X|. Алгоритм перетворення цілого числа в дійсне та навпаки.
курсовая работа [12,4 K], добавлен 08.08.2009Об'єктно-орієнтоване, або об'єктне, програмування. Поняття об'єктів і класів. Розробка програмного забезпечення. Створення операційних систем, прикладних програм, драйверів пристроїв, додатків для вбудованих систем, високопродуктивних серверів.
контрольная работа [135,2 K], добавлен 25.10.2013Вибір засобу виконання поставленої задачі. Функції переривання INT 21h MS DOS, що використані при роботі програм. Функції роботи із DTA та інші функції переривання INT 21h. Функція завершення програми. Розробка програми на Pascal. Допоміжні процедури.
дипломная работа [89,0 K], добавлен 20.01.2009Аналіз сучасного стану технологій програмування. Засоби реалізації об'єктів в мові C++, структура даних і функцій. Розробка програмного продукту - гри "трикутники", з використовуванням моделей, класів і функцій об’єктно-орієнтованого програмування.
курсовая работа [117,8 K], добавлен 14.03.2013Поняття якості програмних засобів, сукупність властивостей та їх критерії: функціональність, надійність, ефективність, супровід та мобільність. Основні поняття і принципи налагодження та тестування програм, об’єктний підхід на етапі конструювання.
контрольная работа [31,5 K], добавлен 15.09.2009Клавіатурний тренажер - вид програмних додатків або онлайн-сервісів, призначених для навчання набору на комп'ютерній клавіатурі. Інкапсуляція - приховування деталей про роботу класів від об'єктів, що їх використовують або надсилають їм повідомлення.
курсовая работа [1,7 M], добавлен 20.05.2017Об’єктно-орієнтоване програмування мовою С++. Основні принципи об’єктно-орієнтованого програмування. Розробка класів з використанням технології візуального програмування. Розробка класу classProgressBar. Базовий клас font. Методи тестування програми.
курсовая работа [211,3 K], добавлен 19.08.2010Послідовність створення бази даних автопарку. Визначення об'єктів та класів і зв’язків між ними. Конструктори та деструктори, успадкування класів. Реалізація програми в середовищі Visual Studio C++, її тестування. Побудова об’єктної моделі додатку.
курсовая работа [529,0 K], добавлен 25.01.2016Розробка програми на мові програмування С++ з використанням об’єктно-орієнтованого програмування, яка включає в себе роботу з файлами, класами, обробку числової інформації і роботу з графікою. Структура класів і об’єктів. Лістинг та алгоритм програми.
курсовая работа [104,4 K], добавлен 14.03.2013