Professional Documents
Culture Documents
Използване На Класовете Array, Sortedarray И
Използване На Класовете Array, Sortedarray И
1. Цел на упражнението
Усвояване използването на класове, произхождащи от клас
AbstractArray и Object от контейнерната библиотека на класовете на
Borland C++.
1
• sizeType arraySize( void ) const; - Връща размера на заделения
масив.
• virtual void detach( Object&, DeleteType = NoDelete); - Претърсва
масив (започвайки от най-макия индекс) за даден обект. Ако обектът
бъде намерен, то той се изключва от масива и в зависимост от
стойността на втория параметър се изтрива. Ако един и същ обект се
среща няколко пъти в масива, само екземплярът с най-малък индекс е
обект на въздействие от страна на функцията.
• virtual void detach( int i, DeleteType = NoDelete); - Отстранява обекта
с индекс i.
• void destroy( int i ); - Изключва и изтрива обект с индекс i на масива.
2
2.4. Клас Association
Асоциацията е връзка между два обекта. Какво ще означава
връзката между обектите зависи изцяло от програмиста: всъщност класа
дори няма средство (начин) да управлява принципа на връзка. Първият
елемент на един асоциативен обект се нарича ключ, а вторият -
стойност. Клас Association е производен на клас Object и има
следните специфични методи:
• Association( Object& key, Object& value ); - Kонструкторът приема
два псевдонима на обекти от клас Object и ги използва за
инициализиране членовете-данни aKey и aValue.
• Association( const Association& ); - Този "copy" конструктор приема
псевдоним на друг обект Association, инициализирайки себе се със
същия ключ и стойност.
• Object& key( void ) const;
• Object& value( void ) const; - Тези функции извличат стойностите от
private обектите, съхранени в асоциативен обект.
• virtual int isAssociation( void ) const; - Връща ненулева стойност, ако
обектите, указвани чрез Object&, са от клас Association.
• private:
Object& aKey;
Object& aValue;
Тези обекти могат да указват всеки обект, производен от клас Object.
Самият клас не налага ограничения или правила за това как да се
използва асоциация. Ключът и стойността на асоциация са със свободен
формат. Деструкторите за aKey и aValue автоматично се извикват,
когато се унищожава съответния асоциативен обект.
За да се формира асоциативен обект, трябва двата обекта да се
предадат по адрес на клас Association.
3. Задачи за изпълнение
Задача 1:
Да се декларира oбект от клас Array (масив) индексите, на който се
изменят от 0 до 5, като на масива се даде възможност да нараства по
време на изпълнение с по 9 елемента.
• Да се добавят 3 обекта от клас DANNI (виж фиг. 8.1. и 8.2) в масива
(да се използва функция add);
• Да се добави обект от клас DANNI на позиции 4 и 5 (да се използва
функция addAt);
• Да се изключи обект от клас DANNI, намиращ се на позиция 2 в
създадения вече масив (да се използва функция detach);
• Да се замени обект от клас DANNI, намиращ се на позиция 1 с нов
обект. (да се използва функция addAt);
• Да се добави нов обект от клас DANNI (да се използва функция add).
3
• Да се създаде Project включващ:
MAIN.CPP - съдържа главната програма;
DANNI.CPP - съдържа дефинициите на потребителския клас.
Задача 2:
Aналогично на Задача 1 да се декларира обект от клас
SortedArray (сортиран масив) индексите, на който се изменят от 0 до 5,
като се предвиди възможност масивът да нараства по време на
изпълнение с по 9 елемента.
• Да се добавят няколко обекта от клас DANNI в масива (да се използва
функция add).
• Да се изключи обект от клас DANNI, намиращ се на позиция 2 в
създадения вече масив (да се използва функция detach).
• Да се добавят два нови обекта от клас DANNI (да се използва
функция add).
• Във файлa DANNI.CPP, съдържащ дефинициите на потребителския
клас, да се дефинират функцията isSortable и функцията isLessThan,
съдържаща критерия, по който ще се определя кога един обект е по-
малък от друг.
Задача 3:
Да се разгледа, компилира и изпълни програмата от фиг. 9.1,
представяща пример за използване на класa Association.
Задача 4:
Аналогично на програмата от Задача 3 да се създаде асоциативен
обект, отразяващ връзката между обект от клас String и обект от
потребителски дефиниран клас DANNI.
4
// ******************* MAIN.CPP ******************** //
// **** Пример за използване на класа Association **** //
#ifndef __IOSTREAM_H
#include <iostream.h>
#define __IOSTREAM_H
#endif
#include <conio.h>
#ifndef __ASSOC_H
#include <assoc.h>
#endif
#ifndef __STRNG_H
#include <strng.h>
#endif
Association *ukazat[SIZE];
char *name = new char[BUFFER_SIZE];
char *number = new char[BUFFER_SIZE];
clrscr();
for ( int i=0; i<SIZE; i++ )
{
cout << "\nИме? ";
cin >> name;
String *nameStr = new String(name);
cout << "\nНомер? ";
cin >> number;
String *numberStr = new String(number);
ukazat[i] = new Association(*nameStr, *numberStr);
} // end for
delete name;
delete number;
Фиг. 9.1