По първата задача:
- В класа Dictionary стойността на изтритите вече контакти с NULL ли трябва да се замества, или е по-добре да се реализира метод за изтриване на елемент (двойка ключ-стойност) от речника?
- Не е ли по-смислено Contact да е структура вместо клас? Така няма да има нужда да се реализират селектори и мутатори за него.
- Кой е по-добрият вариант: класът ContactBook да е приятелски спрямо Dictionary с цел да може да му се достъпват член-данните (например за да се обходят ключовете и/или стойностите му), или да се реализират подходящи селектори за достъп до началото и края на масивите с ключове и стойности?
- Нали не е задължително имената на контактите да са уникални? Т. е. да е възможно няколко души да са с едни и същи имена, като номерата и идентификаторите им са различни? В такъв случай чрез речника за достъп по име ще може да се достъпи само един от контактите с еднакви имена (реших, че е най-смислено да е този с най-малкия идентификатор по лексикографска наредба).
- Грешка ли е, ако в класа ContactBook използвам претоварвания (overload-вания) на методите за намиране и премахване на контакт, приемащи като аргументи класовете Name, PhoneNumber и Id, наследяващи класа std::string, и едно претоварване, приемащо като аргументи std::string и параметър от изброен тип CONTACT_FIELD_TYPE, указващ дали въпросният std::string представлява име, телефонен номер или идентификатор?
- При добавяне на нов контакт в книгата трябва ли да се прави проверка дали той вече съществува (и ако съществува, да не се прави нищо), или, ако съществува, направо да се замества с новия контакт? Все пак е възможно контактът да съвпада само по някои свои полета, а не по всички, например да се различава само по телефонен номер (въпросният човек си е сменил номера) или по име (номерът вече принадлежи на друг човек), така че е смислено да има начин контактите в книгата да може да се променят.
- Щом методът за намиране на контакт не трябва да позволява промяната му, по-смислено ли е самият контакт да се връща като резултат (тип Contact), а не псевдоним към него (тип Contact&)?
По втората задача:
- Имаме ли право да ползваме стандартните библиотеки на C++ при парсването (десериализацията) (конкретно имам предвид <string> и <sstream> и класовете std::string и std::istringstream), или за токенизация да ползвам функцията strtok, а за преобразуване на низ към double - atof?
- При обработката (десериализацията) на формулите взима ли се предвид приоритетът на операциите? В примерите, дадени в условието, всяка двуместна операция е оградена със скоби. Това винаги ли трябва да е така и трябва ли да се задължава потребителят да въвежда формулите по този начин?
- Трябва ли да се грижа по някакъв начин за динамично заделената памет в рамките на функцията readFormula() (например да я сложа в клас, в който деструкторът да освобождава заделената памет, към която са запазени указатели, които са член-данни на класа)?
Освен това, дали е възможно да добавяме допълнителна функционалност (методи, класове и т. н.), различни от указаните в условието (с цел улеснение)?