17121

Розробка програм з використанням класів

Лабораторная работа

Информатика, кибернетика и программирование

Лабораторна робота № 30 Тема: Розробка програм з використанням класів Ціль роботи: вивчити синтаксичні конструкції для оголошення визначення і використання класів. Розібратися з особливостями використання класів у мові С. Обладнання: ПКПО Borland C Теоретичні відо...

Украинкский

2013-06-29

112 KB

2 чел.

Лабораторна робота № 30

Тема: Розробка програм з використанням класів

Ціль роботи: вивчити синтаксичні конструкції для оголошення, визначення і використання класів. Розібратися з особливостями використання класів у мові С.

Обладнання: ПК,ПО Borland C++

Теоретичні відомості

Об'єкт - це абстрактна сутність, наділена характеристиками об'єктів реального світу. У С++ об'єкти грають дуже важливу роль. Усі, чим маніпулює програма, може розглядатися як об'єкт (екземпляр) визначеного класу. При виконанні програми об'єкти створюються і віддаляються. Вони взаємодіють з іншими об'єктами і можуть бути поміщені в масиви, списки, групи, колекції, і т.д.

Об'єкти в С++ - це програмні конструкції (перемінні), формовані так називаними класами. Визначення перемінної класу (об'єкта) також називається створенням екземпляра класу. За створення своїх класів повну відповідальність несе сам програміст. Але він може одержати доступ і до класів, розробленим іншими програмістами. Наприклад, до класів, що знаходяться в бібліотеці чи контейнерів бібліотеці потоків компілятора C.

Оголошення і визначення класу

Клас - це користувальницький тип даних, (аналогічно структурі), що містить (включає, инкапсулирует) не тільки оголошення даних, але і функції. Ці функції називаються функціями-членами класу і визначають, що може робити клас. Структури в С++ також можуть містити функції.

Для того, щоб використовувати клас, його потрібно спочатку оголосити точно так само, як це робиться зі структурами. І так само як для структур, повне оголошення класу може з'явитися в програмі тільки один раз. Розглянемо приклад оголошення простого класу:

class Counter {  // ім'я типу Counter

long  count;// дан-член класу, оголошено в розділі private за замовчуванням

public:        // розділений public, дані доступні з програми

void SetValue (long);  // функції-члени класу, оголошені в розділі public

long GetValue ();  

};

Ключове слово class вводить оголошення класу. Далі випливає ім'я класу (Counter). Тіло класу повинне полягати у фігурні дужки, після яких коштує крапка з коми. Класи можуть містити не тільки оголошення функцій, але і їхні повні визначення inline - функції. Функції усередині класів можуть бути настільки довгими і складними, наскільки це необхідно.

Перемінні, оголошені усередині класу, належать цьому класу. У деяких випадках перемінні можуть розділятися (використовуватися) різними екземплярами класу (із класом пам'яті static). Ідентифікатори (імена) перемінних і функцій усередині класу застраховані від конфліктів з ідентифікаторами інших класів. Клас - це замкнутий програмний комплект із власними ідентифікаторами.

Для ідентифікаторів класу застосовні ті ж правила, що і для інших чи типів імен перемінних. У С++ для ідентифікаторів гранична довжина не визначена, але в Borland C максимальна довжина дорівнює 32 символам. За замовчуванням усі 32 символу є значущими. Регістри букв (рядкова чи прописна) в ідентифікаторах розрізняються.

Тіло класу

Перемінна count оголошена усередині класу. Таким чином, count - це перемінн-член - (дан-член) класу. Будь-яка перемінна, визначена в класі, має область видимості класу. Область видимості перемінн-члена простирається від крапки її оголошення в класі до кінця оголошення класу.

У С++ дані і функції-члени, оголошені усередині класу, не містять специфікацію класу пам'яті (крім static) і лексично належать області дії даного класу.

Клас має стільки перемінних, скільки необхідно. Перемінні можуть бути будь-якого типу, включаючи інші класи, покажчики на об'єкти класів і навіть покажчики на об'єкти, що динамічно розподіляються.

Клас Counter містить оголошення функцій  SetValue () і GetValue (), що називаються функціями-членами класу. Ці функції поки не визначені, вони тільки оголошені. Як і інші функції в С++, функції-члени повинні бути оголошені до використання. Оголошення повинне бути повним, включаючи тип значення, що повертається, і типи аргументів.

Приклад

void Counter::Setvalue (long value)

{

count = value;  // зміна значення

// дан-члена count

}

long Counter::GetValue ()

{

return count; // повернути значення

// даного члена count

     }

При визначенні функції-члена після типу значення, що повертається, указується, членом якого класу є функція. Для цього потрібно написати ім'я класу і поставити за ним дві двокрапки – оператор дозволу області видимості.

Формат визначення функції -члена класу.

Визначення функцій для класу Counter звичайно здійснюється в інших модулях:

<Тип_ що повертається_значення>  <Ім'я_ класу> ::

<Ім'я_функції> (<Оголошення_ параметрів>)

{<Тіло _функції>}

Доступ до членів класу в загальному випадку здійснюється за допомогою нотації

<Ім'я_об'єкта> <Ім'я_члена_класу>,

крім функцій-членів, що мають прямий доступ до дан-членів.

Клас, оголошений усередині іншого класу, називається вкладеним класом. Його ім'я є локальним для класу, що охоплює. Вкладений клас має область дії, що лежить усередині області дії класу, що охоплює. Ця вкладеність є чисто лексичної. Вкладений клас не має ніяких додаткових привілеїв у доступі до  елементів класу, що охоплює, (і навпаки). Рівень вкладеності класів зазначеним образом є кожним.

Наприклад:

struct outer

{

typedef  int tint;  // вираження outer::tint - це синонім типу int tint x;

struct inner          // вираження outer::inner - це вкладена структура (клас)

{static int x;};       // статична перемінна (член) структури типу inner

tint y;

int f();                  // функція-член структури типу outer.

}

int outer::f()           // визначення функції-члена структури типу outer

{

tint y1=х;         // х бачимо і доступний тут, тому що функції-члени мають доступ до //дан-членів класу (структури)

return у1;

}

outer::inner::x=5;  // визначення статичного дан-члена класу

outer::  tint у=2;

Доступ до статичного дан-члена класу здійснюється по імені класу (outer:: inner::), а не по імені об'єкта класу.

Використання класу

Для того щоб використовувати клас, потрібно оголосити (створити) об'єкт цього класу. Об'єкти класу визначаються точно так само, як структурні чи скалярні перемінні. Оголошення класу повинне передувати використанню класу. Користувачу надається опис класу, але не обов'язково його внутрішня реалізація. Щоб оголосити перемінну (об'єкт) people типу Counter, використовується наступну запис:

Counter people;  // аналогічно оголошенню будь-який перемінний int a;

Counter* ptr       // аналогічно int* p;

Для виклику функції-члена об'єкта класу використовується той же запис, що і для звертання до елемента структури: за крапкою випливає ім'я елемента people.GetValue(). Аналогічний виклик і при використанні покажчиків
ptr-> GetValue() В іншому використання функцій-членів нічим не відрізняється від використання традиційних функцій С.

Інкапсуляція. Керування доступом до членів класу

Клас включає як дані, так і функції (код). Доступ до елементів класу керуємо. Це керування стосується не тільки даних, але і коду.

Щоб використовувати клас необхідно знати, які функції і які дані доступні. Набір використовуваних функцій і доступних даних називається користувальницьким інтерфейсом класу.

Головна турбота при створенні класу - сховати якнайбільше інформації. Це накладає обмеження на використання чи даних коду усередині класу. Існує три види користувачів класу:

сам клас  (функції-члени мають прямий доступ до членів класу);

звичайні користувачі  (доступ з функції main() і функцій);

похідні класи  (доступ із класів-спадкоємців до членів базових класів)

Кожен вид користувачів має різні привілеї доступу. Кожен рівень привілеїв доступу асоціюється з визначеним ключовим словом. Рівнів привілеїв доступу в Із усього три, вони визначаються ключовими словами:

private – закриті члени класу;

protected – захищені члени класу;

public – відкриті члени класу.

public - елемент може використовуватися будь-якою функцією й операторами програми;

private- елемент може використовуватися тільки функціями-членами і "друзями" класу, у якому вони оголошені;

protected - той же саме, що для private, але крім того, елемент може бути використаний функціями-членами і функціями-«друзями» класів, похідних від оголошеного класу.

Елементи класу за замовчуванням мають атрибут private, тому специфікатори  доступу public і protected повинні задаватися явно.

Елементи struct за замовчуванням мають атрибут public, але ви можете перевизначити доступ за допомогою специфікаторів доступу private чи protected.

Елементи union за замовчуванням мають атрибут publiс. Перевизначити його не можна. Задавати специфікатори доступу для елементів об'єднання неприпустимо.

Модифікатор доступу (за замовчуванням чи заданий) залишається дійсним для всіх наступних оголошень елементів, поки не зустрінеться інший модифікатор доступу. Наприклад:

class X {

int i;      // X::i за замовчуванням privаte

char ch;    // X::ch аналогічно Х::i

public:

int j;    // наступні два

// елемента - public

int k;     // відкриті дан-члени

protected:

int l;      // X::l - protected

};

struct Y {

int i;      // Y::i за замовчуванням public

private:

int j;      // Y::j - private

public:

int k;      // Y::k - public

};

union Z {

int i;  // public за замовчуванням,

// інших варіантів немає

double d; }; // public

Специфікатори доступу можуть випливати і повторюватися в будь-якій зручній послідовності.

Приклад:

class   AccessControlExample {

int  value_1; // приватні члена-класу за замовчуванням, доступні тільки

void f_1 (long);  //функціям – членам класу

private:

int   value_2; // теж приватні, доступні тільки

intf_2 (char *);   //функціям-членам класу

public:

char*  value_3; // загальнодоступні члени класу

long f_3 ();

protected:

int  value_4; // захищені члени, доступні тільки функціям – членам

void  f_4 (long);   //класи і класів-спадкоємців (похідних класів)

};

Приватні (private) члени класу мають найбільш обмежений доступ. Тільки сам чи клас класи, оголошені як дружні (friend) мають доступ до приватних членів. Похідні класи не мають доступу до приватних членів батьківського класу. Концепція приховання інформації реалізована в мові тільки частково, щоб запобігти ненавмисний доступ до внутрішніх перемінним чи функцій класу, оскільки навмисний доступ можна завжди одержати до будь-якої частини класу в обхід звичайних способів.

Для того, щоб використовувати загальнодоступні члени класу усередині функції, необхідно мати доступ до чи членів чи членам і до тому, і до іншого. Щоб зробити члени загальнодоступними, їхній потрібно оголосити в секції public.

Коли клас використовується як базовий для інших класів, можна зробити його члени доступними тільки для функцій похідних класів за допомогою слова protected .

Класи пам'яті для об'єктів

Клас, у змісті розподілу пам'яті, розглядається як вид структури. Як і структури, класи можуть бути оголошені з такими класами пам'яті, як автоматичний (auto), зовнішній (extern) чи статичний (static).

Перемінні (Ідентифікатори), оголошені усередині класу, видимі тільки в сполученні з об'єктами класу. При неоднозначному тлумаченні повинний використовуватися оператор дозволу області видимості (::).

Використання дан-членів класу

Інкапсуляція дозволяє сховати якісь данные і функції усередині класу. Даних може бути стільки, скільки потрібно і скільки дозволяє пам'ять. Однак їх може і не бути взагалі.

Спроба ініціювати дані усередині оголошення класу помилкова. Клас - це не об'єкт і пам'ять для нього не буде виділена доти, поки не буде створений екземпляр цього класу. Дані, оголошені в класі, варто розглядати як полючи структури, а не як перемінні. Як і для структури, потрібно оголосити об'єкт із типом (ім'ям) класу, а потім ініціювати дані члени.

Дан-члени створюються з тим же класом пам'яті, що й об'єкт класу. Якщо об'єкт з'являється автоматичним, то всі його дані будуть автоматичними. Статичні дан-члени є виключенням з цього правила: коли створюється об'єкт зі статичними членами (даними), пам'ять під них не виділяється, тому що це приведе до появи декількох копій статичних даних. Якщо в класі дане з'являється статичним (static), то всі екземпляри класу будуть розділяти одне і той же дан-член. Статичний член даних, як і глобальна перемінна, розміщається у фіксованій області пам'яті на стадії компонування. Для чи оголошення ініціалізації статичних даних використовується в точності та ж нотація, що і для глобальних перемінних (ехtern).

Якщо дан-член класу оголошений як статичний, то компоновщик виділяє під нього пам'ять тільки один раз, коли виробляється оголошення цього даного в класі. Тому ініціювати статичну перемінну можна в момент її оголошення. Статичні елементи завжди залишаються статичними.

Привілею доступу до статичних даних відрізняються від привілеїв  доступу до нестатичного. До статичного даного необхідно завжди звертатися через ім'я класу й оператор дозволу області видимості (::), незалежно від того, оголошений він як приватний, загальнодоступний чи захищений.

Оператор дозволу області видимості (::) – використовується для доступу до даних- членам:

через функцію-член класу;

через клас, оголошений дружнім для даного класу.

Для доступу до відкритих членів класу використовується оператор крапка (.) з чи об'єктами оператор (->) з покажчиками на об'єкти класу.

Для доступу до закритих і захищених членів класу використовуються функції-члени відкритої частини класу.

Приклад програми на С++

Скласти програму для оголошення і використання даних типу клас відповідно до індивідуального завдання, приведеному в таблиці 20.1.

Варіант

Поняття

Варіант

Поняття

6

Промислове виробництво

20

Плоттеры

#include<iostream.h>

#include<math.h>

class Prom{

public:

 void coutr();

 void cinr();

 static int iden;

private:

 char name[20],cena[20],number[20];

};

int Prom::iden=1;

void Prom::cinr()

{cout<<"Vvedite nazvaniye izdeliya: ";

cin>>name;

cout<<"Vvedite cenu izdeliya: ";

cin>>cena;

cout<<"Vvetite kollichestvo izdeliy: ";

cin>>number;

cout<<"-----\n";

}

void Prom::coutr()

{cout<<"Nazvaniye izdeliya: "<<name<<"\nCena izdeliya: "<<cena;

cout<<"\nKollichestvo izdeliy: "<<number<<"\n-----\n";

}

void main()

{int n,k,idenr;

cout<<"Vvedite chislo isdeliy: \n";

cin>>n;

Prom*arr=new Prom[n];

for(k=0;k<n;k++)

 arr[k].cinr();

idenr=Prom::iden;

cout<<"__________\n";

for(k=0;k<n;k++)

{cout<<"Nomer izgotovitelya: "<<idenr<<'\n';

 arr[k].coutr();}

}

Хід роботи

Вивчити теоретичні відомості.

Відповідно до індивідуального завдання розробити структуру класу, зробити визначення функцій-членів класу (class), розробити алгоритм використання об'єктів і покажчиків на об'єкти класу для доступу до даних і функцій- членам. Перевірити можливість доступу до членів класу в розділах private, public, protected. У розділах оголосити мінімум по одному дан-члені, включаючи статичні (static).

Набрати програму на комп'ютері.

Усунути помилки.

Одержати результат.

Оформити звіт.

Підготуватися до захисту лабораторної роботи, вивчивши контрольні питання по даній темі.

Індивідуальне завдання

Скласти програму для оголошення і використання даних типу клас відповідно до індивідуального завдання, приведеному в таблиці 20.1.

Таблиця 20.1 - індивідуальні завдання

Базовий клас

Похідний клас

Похідний клас

джерело світла

багаття

ліхтар

сховище

зерносховище

елеватор

вантажопідйомний засіб

кран

бруківки кран

тварина

кіт

кіт сіамський

рослина

дерево

дуб

транспортний засіб

літак

дельтоплан

транспортний засіб

автомобіль

легковий автомобіль

транспортний засіб

корабель

танкер

паливо

нафта

бензин

засіб інформації

книга

журнал

сховище інформації

твердий диск

дискета

засіб візуалізації

електронно-променева трубка

жидкокристалличний екран

джерело тепла

сонце

багаття

джерело струму

батарея

акумулятор

продукти

овочі

картопля

таймер

годинник

годинник наручні

морська фауна

риба

ковбаса

пишуче пристрій

ручка

кулькова ручка

пристрій, що ріже

ніж

ножиці

продукти

хліб

батон

інструмент

напилок

надфіль

метал

сталь

загартована сталь

меблі

крісло

стілець

будинок

цех

ковальський цех

будматеріали

цегла

фасонна цегла

одяг

куртка

піджак

пристрій передачі моменту, що крутить

редуктор

черв'ячний редуктор

взуття

черевики

кеди

головний убір

шапка

папаха

погода

дощ

ураган

спорт інвентар

лижі

санки

засіб зв'язку

телефон

радіотелефон

колесо

зубчасте колесо

косозубе колесо

водойма

море

водоймище

оптичний прилад

труба

бінокль

флора

ліс

кущ

посуд

каструля

тарілки

Вимоги до змісту звіту приведені в лабораторній   роботі   №1.

Контрольні запитання

1.Дайте визначення поняттям: об'єкт, клас, дан-члени класу, функції-члени класу.

2.У чому відмінність між класом і об'єктом класу?

3.Чи можна визначити функцію усередині класу?

4.Чи можна використовувати в різних класах однакові імена даних і функцій-членів?

5.Які класи пам'яті можна використовувати при оголошенні об'єктів?

6.Чи можна використовувати класи пам'яті при оголошенні членів класу, чому?

7.Що означає термін інкапсуляція?

8.Як виробляється керування доступом до елементів класу?

9.Що означають специфікатори доступу public, protected, private

10.Назвіть специфікатор доступу за замовчуванням до членів класу і структури.

11.Чи обмежується кількість і порядок проходження розділів у класі?

12.Назвіть особливості використання статичних (static) членів класу.

13.Для чого використовується оператор дозволу області видимості (::)?

14.Чи можуть структури містити функції як елементи?

15.Чи можуть структури і класи бути вкладеними?

16.Яка область дії членів класу?

17.Як одержати доступ до статичних членів класу з програми?

18.Чи можна оголосити тип у тілі класу при оголошенні класу?


 

А также другие работы, которые могут Вас заинтересовать

21021. НАЧАЛЬНОЕ ЗНАКОМСТВО С VISUAL FOXPRO 172.5 KB
  ЗАПУСК VISUAL FOXPRO Запуск Visual FoxPro выполняется стандартными для Windows способами. Командная строка используемая при этом может быть дополнена параметрами: а Игнорируются установки записанные в Регистре Windows и имеющийся файл конфигурации C file Определяет имя и путь к файлу конфигурации который должен использоваться при запуске СУБД или приложения Visual FoxPro. D file Определяет имя и путь к файлу библиотеки RunTime DLL L file e Определяет имя и путь к файлу ресурсов R Обновляет информацию в Регистре Windows...
21022. РАЗРАБОТКА МЕНЮ В VISUAL FOXPRO 111 KB
  Виды меню в Visual FoxPro и работа с ними В Visual FoxPro могут быть разработаны 2 основных вида меню: горизонтальное меню и всплывающее меню. Горизонтальное меню может создаваться для главного окна или форм верхнего уровня и представляет собой строку меню размещенную в верхней части окна или формы. Горизонтальное меню главного окна может заменять системное меню Visual FoxPro или сочетаться с ним.
21023. ВВЕДЕНИЕ В ERP 428.5 KB
  ВВЕДЕНИЕ В ERP В начале 1990х гг. Системы класса MRPII в интеграции с модулем финансового планирования Finance Requirements Planning FRP получили название систем планирования ресурсов предприятий Enterprise Resource Planning ERP. Иногда также встречается термин планирование ресурсов в масштабах предприятия Enterprisewide Resource Planning. В основе ERPсистем лежит принцип создания единого хранилища репозитория данных содержащего всю корпоративную бизнесинформацию: плановую и финансовую информацию производственные данные...
21024. Информационные системы и технологии. Контур «Логистика» 504 KB
  Процесс реализации регламентируют следующие документы: прайслисты документыоснования счета расходные накладные на отпуск МЦ складские ордера. Перейдя в модуль Настройка проверьте статус ДО на продажу: Настройка =Настройка= Настройка Настройки Галактики Логистика Документы Управление сбытом ДО на продажу Значения по умолчанию Статус оформляемый. Сформируем счет на продажу: Управление сбытом Документы Счета ДО на продажу [F7] формирование нового ДО. Сформируем накладную на отпуск МЦ: Управление сбытом ...
21025. Контур «Бухгалтерский учет» Теоретические положения 253.5 KB
  Теоретические положения Прайслисты удобно использовать в бизнеспроцессах операций сбыта для определения отпускной цены. В прайслисты включаютсятовары или услуги описанные в каталоге МЦ или каталоге услуг. Каждый товар либо услуга могут быть представлены в нескольких прайслистах причем иметь в них разные цены. Для формирования прайслиста подадим команды Управление сбытом Прайслисты Формирование рис.
21026. Контур «Бухгалтерский учет» Финансово-расчетные операции (ФРО 1.36 MB
  С другой стороны при формировании документов в каждом из этих модулей можно вызвать для выполнения Типовые хозяйственные операции ТХО настройка которых выполняется в том числе и в модуле ХозОперации.2 ТХО можно выполнить только войдя непосредственно в модуль ХозОперации. В данном разделе рассматриваются вопросы относящиеся к ТХО. В этом случае необходимы три ТХО.
21027. ЗНАКОМСТВО С ERP СИСТЕМОЙ «ГАЛАКТИКА» 605.5 KB
  После запуска системы Галактика на экране отображается Главное меню системы фрагмент Главного меню показан на рис. Панель главного окна системы Для запуска модуля достаточно щелкнуть мышью по соответствующей кнопке Главного меню. Кнопки Главного меню снабжены всплывающими подсказками которые появляются при установке указателя мыши на кнопку меню. Для перемещения панели Главного меню необходимо установить указатель мыши на логотип корпорации Галактика в левом верхнем углу панели нажать левую кнопку мыши и удерживая ее переместить...
21028. ЗНАКОМСТВО С СИСТЕМОЙ АДМИНИСТРИРОВАНИЯ КОМПЛЕКСА «ГАЛАКТИКА» «SUPPORT» 257.5 KB
  Модуль Консоль администратора является интсрументом администраторов системы и доступен только администраторам. Модуль предназначен для интерактивного мониторинга и администрирования лицензий пользователями контуров и компонентов системы Галактика ERP. Консоль администратора позволяет: Регистрировать пользователей систем Регистрировать группы пользователей систем Регистрировать системы в которых осуществляется администрирование использования лицензий пользователями Отслеживать захват лицензий каждым пользователем определить сколько...
21029. Модуль логистики и управления системой «ГАЛАКТИКА ERP» 39 KB
  Сделать это можно из главного меню программы пролистав до самого конца или из открывшегося окна перейдя следующим образом: меню Сервис Главное меню Остальное Остальное Настройка. Путь от главного меню: Настройка Заполнение каталогов Организации и банки. Введите группы контрагентов которые необходимы вашей организации функция локального меню Создать группу организаций CtrlF7. Для этого установите курсор на необходимую группу и вызовите функцию локального меню Добавить организацию в текущую группу.