Здавалка
Главная | Обратная связь

ПРИКЛАД 1 Реалізація простого (одиничного) однорівневого успадкування.



// p1.cpp : Defines the entry point for the console application.

#include "stdafx.h"

#include <iostream>

#include <conio.h>

using namespace std;

class B {

int b;

public:

void setb(int n){b=n;}

void showb(){cout<<"in B b="<<b<<endl;}

};

class D: public B {

int d;

public:

void setd(int n){d=n;}

void showd(){cout<<"in D d="<<d<<endl;}

};

//void main()

int _tmain(int argc, _TCHAR* argv[])

{ D qq; //объявление объекта порожденного класса

qq.setb(1); //доступ к члену базового класса qq.x

qq.showb(); //доступ к члену базового класса

qq.setd(2); //доступ к члену производного класса qq.y

qq.showd(); //доступ к члену производного класса

qq.showb(); //доступ к члену базового класса

getch();

return 0;

}

//=== Результат работы ===in B b=1 //qq.xin D d=2 //qq.yin B b=1 //qq.x

 

Завдання для самостійниго виконання

 

Додаток. Варіанти завдань

Перелік класів.

Студент, викладач, персона, зав. кафедрою

Службовець, персона, робітник, інженер

Робітник, кадри, інженер, адміністрація

Деталь, механізм, виріб, вузол

Організація, страхова компанія, суднобудівна компанія, завод

Журнал, книга, друковане видання, підручник

Тест, іспит, випускний іспит, випробовування

Місце, область, місто, мегаполіс

Іграшка, продукт, товар, молочний продукт

Квитанція, накладна, документ, чек

Автомобіль, потяг, транспортний засіб, експрес

Двигун, двигун внутрішнього згоряння, дизель, турбореактивний двигун

Республіка, монархія, королівство, держава

Ссавці, парнокопитні, птаха, тварина

Корабель, пароплав, вітрильник, корвет

Лабораторна робота №4 Ієрархія об'єктів і групи. Ітератори.

Мета. Одержати практичні навички створення об'єктів-груп і використання методів-ітераторів.

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

Група.

Група — це об'єкт, у який включені інші об'єкти. Об'єкти, що входять у групу, називаються елементами групи. Елементи групи, у свою чергу, можуть бути групою.

Приклади груп:

1)Вікно в інтерактивній програмі, що володіє такими елементами, як поля вводу і редагування даних, кнопки, списки вибору, діалогові вікна і т.д. Прикладами таких вікон є об'єкти класів, породжених від абстрактного класу TGroup (TDeskTop, TWindow, TDialog) в ієрархії класів бібліотеки Turbo Vision і об'єкти класів, породжених від TWindowObject в ієрархії класів бібліотеки OWL.

2)Агрегат, що складається з більш дрібних вузлів.

3)Город, що складається з рослин, системи поливу і плану вирощування.

4)Деяка організаційна структура (наприклад, ФАКУЛЬТЕТ, КАФЕДРА, СТУДЕНТСЬКА ГРУПА).

Ми відрізняємо “групу” від “контейнера”. Контейнер використовується для збереження інших даних. Приклади контейнерів: об'єкти класу TCollection бібліотеки Turbo Visionі об'єкти контейнерних класів бібліотеки STLуC++(масиви, списки, черги).

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

Група дає другий вид ієрархії (перший вид — ієрархія класів, побудована на основі успадкування) — ієрархію об'єктів (ієрархію типу ціле/частина), побудовану на основі агрегування ( агрегація).

Реалізувати групу можна декількома способами.

1.Клас “група” містить поля даних об'єктного типу. Таким чином, об'єкт “група” як дані містить або безпосередньо свої елементи, або покажчики на них

class TWindowDialog: public TGroup

{

protected:

TInputLine input1;

TEdit edit1;

TButton button1;

/*інші члени класу*/

};

Такий спосіб реалізації групи використовується в C++Builder.

2.Група містить член-дане last типу TObject*, що вказує на початок зв'язаного списку об'єктів, включених у групу. У цьому випадку об'єкти повинні мати поле next типу TObject*, що вказує на наступний елемент у списку. Такий спосіб використовується при реалізації груп у Turbo Vision.

3.Створюється зв'язаний список структур типу TItem:

struct TItem

{TObject* item;

TItem* next;};

Поле item указує на об'єкт, включений у групу. Група містить поле last типу TItem *, що вказує на початокзв'язаного списку структур типу TItem.

Якщо необхідний доступ елементів групи до її полів і методів, об'єкт типу TObject повинний мати поле owner типу TGroup*, що вказує на власника цього елемента.

Методи групи.

Є два методи, що необхідні для функціонуваннягрупи:

1)void Insert(TObject* p);

Вставляє елемент у групу.

2)void Show();

Дозволяє переглянути групу.

Крім цього група може містити наступні методи:

1) int Empty();

Показує, чи є хоча б один елемент у групі.

2) TObject* Delete(TObject* p);

Видаляє елемент із групи, але зберігає його в пам'яті.

3)void DelDisp(TObject* p);

Видаляє елемент із групи і з пам'яті.

Ієрархія об'єктів

Ієрархія класівє ієрархія за принципом успадкування, тобто типу "це є різновид того". Наприклад, "робітник є різновид персони", “автомобіль” є різновид “транспортного засобу”. На відміну від цього ієрархія об'єктів — це ієрархія за принципом входження, тобто типу "це є частиною того". Наприклад, "установа - частина заводу", “двигун” частина “автомобіля”. Таким чином об'єкти нижнього рівня ієрархії включаються в об'єкти більш високого рівня, що є для них групою.

Ітератор.

Ітератори дозволяють виконувати деякі дії для кожного елемента визначеного набору даних.

For all елементів набору { дії}

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

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

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

Визначимо тип покажчика на функцію в такий спосіб:

typedef void(*PF)(TObject*,< додаткові параметри>);

Функція має обов'язковий параметр типу TObject чи TObject*, через який їй передається об'єкт, для якого необхідно виконати визначені дії.

Метод - ітератор з'являється в такий спосіб:

void TGroup::ForEach(PF action,< додаткові параметри >);

де

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

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

Потім визначається покажчик на функцію і ініціюється переданою ітератору функцією.

PF pf=myfunc;

Тоді ітератор буде викликатися, наприклад для додаткового параметра типу int, так:

gr.ForEach(pf,25);

Тут gr-об'єкт-група.







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.