Задача на классы - Наследование, виртуальные методы и прочая прелесть
Primary tabs
условие:
2. Библиотека работы с множествами (2 студента, максимум – 100 баллов) Разработать библиотеку обобщенных классов для работы с множествами данных. В структуру классов входят как минимум: • ISet<T>: IEnumerable<T> – базовый интерфейс для всех списков; o методы: void Add(T value); void Clear(); bool Contains(T value); void Remove(T value); o свойства: int Count; bool isEmpty; • SetException – класс, описывающий исключения, которые могут происходить в ходе работы с множествами (также можно написать ряд наследников от SetException); • ArraySet<T>: ISet<T> – класс множества на основе массива; • LinkedSet<T>: ISet<T> – класс множества на основе связанного списка; • HashSet<T>: ISet<T> – класс множества на основе алгоритма хеширования (использовать методы GetHashCode и Equals типа T); • UnmutableSet<T>: ISet<T> – класс неизменяющегося множества, является оберткой над любым существующим множеством (должен кидаться исключениями на вызов любого метода, изменяющего множество); • SetUtils – класс различных операций над множеством; o методы: static bool Exists<T>(ISet<T>, CheckDelegate<T>); static ISet<T> FindAll<T>( ISet<T>, CheckDelegate<T>, SetConstructorDelegate<T>); static ISet<TO> ConvertAll<TI, TO>( ISet<TI>, ConvertDelegate<TI, TO>, SetConstructorDelegate<TO>); static void ForEach(ISet<T>, ActionDelegate<T>); static bool CheckForAll<T>(ISet<T>, CheckDelegate<T>); свойства: static readonly SetConstructorDelegate<T> ArraySetConstructor; static readonly SetConstructorDelegate<T> LinkedSetConstructor; static readonly SetConstructorDelegate<T> HashSetConstructor; Также необходимо разработать серию примеров, демострирующих основные аспекты работы с данной библиотекой множеств.
- Log in to post comments
- 13088 reads
baton
Fri, 05/17/2013 - 23:09
Permalink
мысли по решению
1) произвольное множество и методы работы с ним опишем с помощью базового класса и его наследников (наследники - для различных типов данных, содержащихся в множестве - для которых придется менять часть методов).
2) само множество может представлять собой линейный список (необходимо когда данные разных типов в одном множестве) или массив (для одного типа). наверно, терпения у меня не хватит и я сделаю только с массивом.
3) методы, которые будут меняться в наследниках, объявим виртуальными.
о виртуальных методах и полиморфизме: http://programmersclub.ru/38/
про статические методы и элементы : http://www.c-cpp.ru/books/staticheskie-c...
vedro-compota
Sat, 05/18/2013 - 11:30
Permalink
множества вполне могут быть
множества вполне могут быть реализованы на основе массивов.
_____________
матфак вгу и остальная классика =)
baton
Sat, 05/18/2013 - 21:04
Permalink
массивы - списки
это мне известно)) так я и собираюсь сделать - так проще
но препод поощряет создание еще одной реализации - по спискам.
по условию вообще надо и так и этак...
базовый класс (чьи интерфейсные методы будут наследоваться классами конкретных вариантов множеств) построен на следующем скелете:
про непонятную конструкцию типа template и про шаблончики читаем тут http://programmersclub.ru/29/
baton
Sun, 05/19/2013 - 13:12
Permalink
ничтоже сумняшеся
для начала я решил сделать все это в одном классе на массиве - без всяких виртуалок и наследования - дабы мозги излишне не грузить всей задачей сразу и потренироваться.
код класса:
конкретно в этом куске кода у меня ошибка такого типа:
"...klass_ example\klass_ example\klass.h(16): error C2082: переопределение формального параметра "B" ..."
baton
Sun, 06/09/2013 - 22:19
Permalink
еще пучок кода
в процессе буду дописывать и редактировать
это уже будет реализация через списки
baton
Sun, 06/09/2013 - 02:54
Permalink
ннннннннннн
ннннннннннн