Задача. Да се напише програма, реализираща мини-база данни с книгите в една домашна библиотека, с възможност за добавяне, сортиране, печатане и търсене. Информацията за книгите да съдържа заглавие, автор, брой страници и година на издаване.

Преди да преминем към реализация на програмата, е хубаво да си помислим за някои свойства на контрукторите за копиране. В кои случаи се извиква кноструктор за копиране и в кои - оператор за присвояване? Например, какво се случва в програмата:

class A{...};

void f (A a){...}
void g(const A& a){..}

void main (){
A a, b=a;
a=b;
f(b);
g(b);
}

Кога кой конструктор се извиква? Какво прави вградения конструктор за копиране? Кога това създава проблем? Как се решава проблема със споделянето на динамична памет?

При решаването на задачата реализираме клас Library с подходящия интерфейс, предоставящ необходимите методи за вмъкване, търсене, сортиране и печатане. В помощ на класа да дефинираме и клас Book, съдържащ подходящи член данни и коструктори (какви?). За улеснение,
Library ще реализираме чрез статичен масив от обекти от клас Book.

С помощта на стойности по подразбиране на формалните параметри на метода за търсене, да се реализира мултифункционално търсене, например по автор, заглавие, година, както и по произволна комбинация от тези критерии.

Метода за сортиране да получава аргумент, който да указва критерий за сортиране - по автор, по заглавие, по година. Да забележим, че особеният момент в такъв метод е сравняването на две книги по желаната наредба. Затова да реализираме моетод Book::lessThan (const Book &, int criterion), който реализира наредбата в зависимост от критерия, например за criterion = 0 - по заглавие, = 1 - по автор, = 2 - по година. С помощта на този метод, метода за сортиране на
Library работи универсално, независимо от избрания критерий. Да се обсъди и фрагмента на сортирането, в който се разменят два елемента на масива и да се помисли защо споделянето на динамична памет в този случай не е фатално.
Последно модифициране: събота, 12 ноември 2011, 17:38