scanf ("%f",&x); // зчитування введеного числа у форматі„з плаваючою крапкою”
printf ("Enter the number y: "); // вивід на екран тексту вимоги введення 2-го множника
scanf ("%f",&y); // зчитування введеного числа у форматі„з плаваючою крапкою”
z=x*y;
printf ("result\n%f\n",z); // виведення результату множення у форматі„з плаваючою крапкою”, \n-перехід на новий рядок
return (0);
}
Стандартні бібліотеки
Специфікація ANSI мов С и C++ визначає набір функцій стандартної бібліотеки. Незважаючи на те що стандартна бібліотека дуже велика, у ній можна виділити кілька великих функціональних груп.
Стандартні функції вводу/виводу. Їхні описи включені у файл заголовків stdio. h і віртуальний заголовок cstdio. У цю групу включають функції консольного вводу/виводу, такі як printf, scanf, gets, puts, getchar і putchar. Сюди також входять функції файлового вводу/виводу fopen (для відкриття файлів), fprintf, fscanf, fputs, fgets і ряд інших (для читання/ запису текстових файлів), fread і fwrite (для читання/ запису двійкових файлів). Також до цієї групи відносяться функції одержання поточної позиції у файлі й установки нової позиції у файлі (fseek, ftell, rewind), що дозволяють організувати довільний доступ до даних у файлі
Нижче приведені основні функції консольного вводу/виводу
· getchar () повертає черговий символ із клавіатури як ціле;
· gets (s) читає символи з клавіатури до появи символу нового рядка і поміщає їх у рядок s (сам символ нового рядка в рядок не включається);
· printf (fmt, par1, par2,.) виводить рядок параметрів par1, раг2 і т.д. у форматі, визначеному рядком fmt на стандартний пристрій виводу (звичайно монітор). Повертає число виведених символів (див. опис функції printf);
· putchar (ch) виводить символ ch на стандартний пристрій виводу. Якщо вивід успішний, повертається значення ch,;
· puts (s) виводить рядок s на стандартний пристрій виводу, додаючи наприкінці символ нового рядка. Повертає ненегативне значення при успіху або EOF - при помилці;
· scanf (fmt, par2, раг2,.) уводить рядок параметрів раr1, раг2 і т.д. у форматі, обумовленому рядком fmt зі стандартного пристрою вводу (із клавіатури), повертає число змінних, котрим привласнене значення
Для реалізації потокового вводу/виводу використовується функції. Описані в iostream. h
Функції роботи з рядками. Їхні описи включені у файл заголовків string. h і віртуальний заголовок cstring. У цю групу входять функції роботи з простими рядками типу char*: strlen повертає довжину рядка, strcpy копіює рядок в іншу і strcat додає рядок у кінець рядка. Функція stremp використовується для порівняння двох рядків на співпадіння. Інші важливі функції: strncat, strnemp, strncat і strstr. Є також ряд функцій типу strchr для пошуку необхідного символу. Функція strtok корисна для розбивки рядка на окремі елементи.
· strcat (s1fs2) додає s2 до s1;
· strcmp (s1, s2) порівнює рядки і повертає негативне (якщо s1 менше s2), нульове (якщо s1 дорівнює s2) або позитивне (якщо s1 більше s2) значення;
· strcpy (s1, s2) копіює s2 у s1;
· strlen (s) повертає довжину рядка (без врахування символу завершення рядка);
· strncat (s1, s2, n) додає s2 до s1, але не більш n символів;
· strncmp (s1, s2, n) аналогічна strcmp, але порівнює не більше n символів;
· strncpy (s1, s2, п) копіює s2 у s1, але не більш n символів;
· strstr (s1, s2) пошук першого входження підрядка s2 у рядок s1.
· strchr (s,ch) повертає покажчик на перше входження символу ch у рядок s, якщо його немає, то повертається null;
· strcoll (s1,s2) аналог strcmp, але враховує установки локалізації
· strcspn (s1, s2) повертає значення індексу будь-якого з символів з s2 у рядку s1;
· strerror (n) повертає покажчик на рядок з описом помилки номер n;
· strpbrk (s1, s2) аналогічна strcspn, але повертає покажчик, а не індекс;
· strrchr (s, ch) аналогічна strchr, але пошук ведеться з кінця рядка;
strspn (s1, s2) повертає індекс першого символу в s1, відсутнього в s2;
Функції визначення типу символу. Їхні описи включені у файл заголовків ctype. h і віртуальний заголовок її type. Ці функції дозволяють визначити приналежність символу до визначеної категорії.
Математичні функції. Їхні описи включені у файл заголовків math. h і у віртуальний заголовок cmath. До цієї групи відносяться такі стандартні тригонометричні і гіперболічні функції, sin, cos, tan, asin, acos, atan, sinh, cosh і tanh. Також включаються функції pow для обчисленні ступеня числа, ехр для обчислення експонентної функції і логарифмічні функції log і log 10, а також функція для обчислення найближчого більшого цілого ceil, функції для обчислення найближчого меншого цілого floor, fabs, fmod, frexp, ldexp, modf і функції обчислення квадратного кореня sqrt. Необхідно відзначити, що такі математичні по своїй природі функції, як abs і rand, описані у файлі stdlib. h, а не в math. h.
Функції роботи з пам'яттю. Їхні описи включені у файл заголовків stdlib. h і у віртуальний заголовок cstdlib. В основному ці функції використовуються в бібліотеці для сумісності з мовою С. До них відносяться функції malloc, free, calloc і realloc. У мові С++ для тих же цілей переважно використовуються оператори new і delete.
Робота з програмою Microsoft Visual C++
Головне вікно програми має вигляд, зображений на рис.1
Щоб почати роботу, необхідно обрати FileNewFilesC++ Source File (рис.2).
Рис.1. Загальний вигляд головного вікна програми Microsoft Visual C++
Після завершення набору тексту програми натиснути кнопку (Build). Після виправлення помилок в разі їх виникнення, запустити програму на виконання, натиснувши кнопку Run
Рис.2. Вибір типу створюваного файлу.
Основні поняття об'єктно-орієнтованого програмування
1. Теоретична частина
Об'єкт - це абстрактна сутність, наділена характеристиками об'єктів навколишнього реального світу. Створення об'єктів і маніпулювання ними - це зовсім не привілей мови C++, а скоріше результат методології програмування, що втілює в кодових конструкціях опис об'єктів і операції над ними. Кожен об'єкт програми, як і будь-який реальний об'єкт, відрізняється власними атрибутами і характерною поведінкою. Об'єкти можна класифікувати по різних категоріях. Кожен клас займає визначене місце в ієрархії класів. Таким чином, будь-який клас визначає деяку категорію об'єктів, а всякий об'єкт є екземпляр деякого класу.
Об'єктно-орієнтоване програмування (ООП) - це методика, що концентрує основну увагу програміста на зв'язках між об'єктами, а не на деталях їхньої реалізації. Основні принципи ООП:
· інкапсуляція;
· спадкування;
· поліморфізм;
· створення класів і об'єктів)
Інкапсуляція є об'єднання в єдиному об'єкті даних і кодів, що оперують з цими даними. У термінології ООП дані називаються членами даних (data members) об'єкта, а коди - об'єктними методами або функціями-членами (methods, member functions).
Інкапсуляція дозволяє в максимальному ступені ізолювати об'єкт від зовнішнього оточення. Вона істотно підвищує надійність розроблюваних програм, тому що локалізовані в об'єкті функції обмінюються з програмою порівняно невеликими обсягами даних, причому кількість і тип цих даних звичайно ретельно контролюються. У результаті заміна або модифікація функцій і даних, інкапсульованих в об'єкт, як правило, не спричиняє негативних наслідків для програми в цілому (з метою підвищення захищеності програм в ООП майже не використовуються глобальні змінні).
Іншим достатньо важливим наслідком інкапсуляції є легкість обміну об'єктами, переносу їх з однієї програми в іншу.
Запозичена в природи ідея спадкування вирішує проблему модифікації поведінки об'єктів і додає ООП виняткову силу і гнучкість. Спадкування дозволяє, практично без обмежень, послідовно будувати і розширювати класи, створені розробниками. Починаючи з найпростіших класів, можна створювати похідні класи по зростаючій складності, що не тільки легкі в налагодженні, але і прості за внутрішньою структурою.
Послідовне проведення в життя принципу спадкування, особливо при розробці великих програмних проектів, добре погоджується з технікою спадного структурного програмування (від загального до частки), і багато в чому стимулює такий підхід. При цьому складність коду програми в цілому істотно скорочується. Похідний клас (нащадок) успадковує усі властивості, методи і події свого базового класу („батька”) і всіх його попередників в ієрархії класів.
При спадкуванні базовий клас обростає новими атрибутами й операціями. У похідному класі звичайно з'являються нові члени даних, властивості і методи. При роботі з об'єктами програміст звичайно підбирає найбільш підходящий клас для рішення конкретної задачі і створює одного або декількох нащадків від нього, що здобувають здатність робити не тільки те, що закладено в „батьку”. Дружні функції дозволяють похідному класові одержати доступ до всіх членів даних зовнішніх класів.
Крім того, похідний клас може перевантажувати (overload) наслідувані методи в тому випадку, коли їхня робота в базовому класі не пасує нащадкові. Використання перевантаження в ООП усіляко заохочується, хоча в прямому розумінні значення цього слова перевантажень звичайно уникають. Говорять, що метод перевантажений, якщо він асоціюється з більш ніж одною однойменною функцією.
Поліморфізм - це властивість родинних об'єктів (тобто об'єктів, класи яких є похідними від одного „батька”) поводитися по-різному в залежності від ситуації, що виникає в момент виконання програми. У рамках ООП програміст може впливати на поведінку об'єкта тільки побічно, змінюючи вхідні в нього методи і додаючи „нащадкам" відсутні в „батька" специфічні властивості.
Для зміни методу необхідно перевантажити його в „нащадку”, тобто оголосити в „нащадку” однойменний метод і реалізувати в ньому потрібні дії. У результаті в об'єкті-батьку й об'єкті-нащадку будуть діяти два однойменних методи, що мають різну кодову реалізацію і, отже, що додають об'єктам різне поведінку. Наприклад, в ієрархії родинних класів геометричних фігур (точка, пряма лінія, квадрат, прямокутник, окружність, еліпс і т.д.) кожен клас має метод Draw, що відповідає за належний відгук на подію з вимогою намалювати цю фігуру.
Завдяки поліморфізмові, „нащадки” можуть перевантажувати загальні методи "батька" для того, щоб реагувати специфічним образом на ту саму подію.
Класи в C++
Перед тим як працювати з класом, програма повинна його оголосити. Розглянемо синтаксис оголошення класу на прикладі класу circle:
class Circle {
public:
Circle ();
void SetRadius (void);
void GetRadius (void);
~Circle ();
private:
void CalculateArea (void);
int radius;
int color;
};
Ключове слово class показує компілятору, що все, що знаходиться у фігурних дужках ({}) належить оголошенню класу. (Не забувайте ставити крапку з комою наприкінці оголошення.) Оголошення класу містить оголошення елементів даних (наприклад, int radius) і прототипи функцій-елементів класу. В оголошенні класу circle містяться наступні елементи даних:
Оголошення також містить п'ять прототипів функцій-елементів:
Circle (); // конструктор
~Circle (); // деструктор
Прототипи функцій і оголошення елементів даних включаються в оголошенні класу в розділи public (відкритий) або private (закритий). Ключові слова public і private говорять компілятору про приступність елементів-функцій і даних. Наприклад, функція SetRadius () визначена в розділі public, і це означає, що будь-яка функція програми може викликати функцію SetRadius (). Функція CalculateArea () визначена в розділі private, і цю функцію можна викликати тільки в коді функцій-елементів класу Circle.
Аналогічно, оскільки елемент даних radius оголошений у розділі private, прямий доступ до нього (для установки або читання його значення) можливий тільки в коді функцій-елементів класу Circle. Якби ви оголосили елемент даних radius у розділі public, то будь-яка функція програми мала би доступ (для читання і присвоювання) до елемента даних radius.
Приклад: Заповнення і вивід платіжної відомості
include <iostream>
#include <cstring>
using namespace std;
class employee {
char name [80]; // private by default
void putname (char *n); // these are public
void getname (char *n);
double wage; // now, private again
void putwage (double w); // back to public
double getwage ();
void employee:: putname (char *n)
{
strcpy (name, n);
void employee:: getname (char *n)
strcpy (n, name);
void employee:: putwage (double w)
wage = w;
double employee:: getwage ()
return wage;
int main ()
employee ted;
char name [80];
ted. putname ("Ted Jones");
ted. putwage (75000);
ted. getname (name);
cout << name << " makes $";
cout << ted. getwage () << " per year. ";
return 0;
2. Завдання до лабораторної роботи
Створити клас трикутників, змінними якого є сторони трикутника, а методами-обчислення його площі і периметра. Створити два об'єкти, що належать до створеного класу, і для одного обчислити площу, а для другого - периметр.
Страницы: 1, 2, 3