Курсовая работа: Розробка власного класу STRING
1.4 Використання визначеного користувачем типу Time за допомогою Struct
Програма на мал.1 створює визначений користувачем тип структури Time із трьома цілими елементами: hour, minute і second. Програма визначає єдину структуру типу Time, названу dinnerTime, і використовує операцію крапка для присвоєння елементам структури початкових значень 18 для hour, 30 для minute і 0 для second. Потім програма друкує час у військовому (24-годинному) і стандартному (12-годинному) форматах. Помітимо, що функції друку приймають посилання на постійні структури типу Time. Це є причиною того, що структури Time передаються друкуючим функціям по посиланню - цим виключаються накладні витрати на копіювання, пов'язані з передачею структур функціям за значенням, а використання const запобігає зміні структури типу Time функціями друку. Далі ми обговоримо об'єкти const і функції-елементи const.
Порада з підвищення ефективності: Щоб уникнути накладних витрат, пов’язаних із передачею по значенню й одержати користь захисту початкових даних від зміни, передавайте аргументи великого розміру як посилання const.
Існують перешкоди створенню нових типів даних зазначеним способом за допомогою структур. Оскільки ініціалізація структур спеціально не потрібна, можна мати дані без початкових значень і випливаючи звідси проблеми. Навіть якщо дані одержали початкові значення, можливо, це було зроблено невірно. Неправильні значення можуть бути привласнені елементам структури (як ми зробили на мал.1), тому що програма має прямий доступ до даних. Програма присвоїла невірні значення всім трьом елементам об'єкта dinnerTime типу Time. Якщо реалізація struct зміниться (наприклад, час тепер буде представляється як число секунд після півночі), то всі програми, які використовують struct, потрібно буде змінити. Не існує ніякого "інтерфейсу", гарантуючого те, що програміст правильно використає тип даних і що дані є несуперечливими.
// Створення структури, завдання й друк її елементів.
#include <iostream. h>
struct Time { // визначення структури
int hour; // 0-23
int minute; // 0-59
int second; // 0-59 };
void printMilitary (const Time &); // прототип void printStandard (const Time &); // прототип
main ()
{
Time dinnerTime; // змінна нового типу Time
// завдання елементам правильні значення dinnerTime. hour = 18; dinnerTime. minute = 30; dinnerTime. second = 0;
cout " "Обід відбудеться в ";
printMilitary (dinnerTime);
cout " " за військовим часом," " endl
<< "що відповідає "; printStandard{dinnerTime); cout << " за стандартним часом." << endl;
// завдання елементам неправильних значень
dinnerTime. hour = 29;
dinnerTime. minute = 73; dinnerTime. second = 103;
cout " endl << "Час із неправильними значеннями: "; printMilitary (dinnerTime); cout << endl; return 0;
// Друк часу у військовому форматі void printMilitary (const Time &t)
{
cout " (t. hour < 10?"0": "")" t. hour
"": "" (t. minute < 10?"0": "")" t. minute
"": "" (t. second < 10?"0": "")" t. second;
}