С++, 1 курс, 3 группа, 2 семестр, 2016/17 — различия между версиями
(→Общие знания) |
(→Общие знания) |
||
Строка 24: | Строка 24: | ||
* [https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%BE_%D1%82%D1%80%D1%91%D1%85_(C%2B%2B_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5) Правило трёх/пяти]. На <code>&&</code> пока забиваем - это move-семантика, появилась в C++11, будет в конце семестра, там весело (теоретически похоже на ад, если стандарт читать, на практике применять просто). Пока что просто игнорируйте соответствующий конструктор и оператор. | * [https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%BE_%D1%82%D1%80%D1%91%D1%85_(C%2B%2B_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5) Правило трёх/пяти]. На <code>&&</code> пока забиваем - это move-семантика, появилась в C++11, будет в конце семестра, там весело (теоретически похоже на ад, если стандарт читать, на практике применять просто). Пока что просто игнорируйте соответствующий конструктор и оператор. | ||
+ | * <code>delete</code> и <code>delete[]</code> *корректно* разбирают случай "аргумент - <code>NULL</code>", просто ничего не делает. Дополнительные проверки не нужны. | ||
== Примерные правила оценки лабораторных == | == Примерные правила оценки лабораторных == |
Версия 15:14, 26 февраля 2017
Преподаватель: Егор Суворов (egor_suvorov@mail.ru, vk.com/egor.suvorov)
Префикс в теме письма: [C++TA]
Вопросы можно писать либо в ВК, либо на почту. В ВК быстрее отвечаю. Если вопросов много или они требуют вдумчивого ответа - лучше на почту.
Есть чат в ВК, там публикуются ответы на часто задаваемые вопросы, комментарии по лаборатным/домашкам и прочее. Также могут появляться общие комментарии по программированию и плюсам в частности. Я их буду время от времени переносить в раздел ниже, если заметили, что чего-то не хватает - перенесите. Копировать мои сообщения самостоятельно не стоит.
Содержание
Общие знания
Deadline
По поводу deadline и попыток сдачи *лабораторных* (для домашек будут особенности):
- Дедлайн железобетонный в 23:59. Если проверяю до дедлайна - беру последнюю версию. После после - последнюю, которая закоммичена до 23:59. Проверяйте, что все файлы добавились в репозиторий.
- Проверяю по возможности, одна попытка есть всегда, если успеваете отреагировать на замечания до дедлайна - то получается две, три, и так далее.
- К сожалению, пока что проверяю только в воскресенье днём-вечером, так что скорее попытка одна. Возможно, в будущем это изменится.
- Жёстких ограничений на количество попыток сдачи нет, но спамить не стоит. Процесс сдачи итеративный, но не интерактивный.
- Вы можете задавать вопросы в течение недели по любой теме: теория, "как правильно", "можно ли сделать так", "почему вот такой вот код на таком тесте выдаёт X, а не Y" (обязательно наличие кода и каких-то подробностей вроде "вот отчёт Valgrind и тест из одной строчки, с int работает, с Product - нет" - как на StackOverflow), "есть ли бросающиеся в глаза стилистические замечания?"
- Про проверку стиля в течение недели: не обещаю, что буду проверять так же внимательно, как и на "реальной" попытке сдачи. Можно присылать и куски кода, и общие вопросы ("куда класть тесты для вектора"), и весь проект целиком. Чем меньше кусок кода - тем быстрее и качественнее получите ответ.
Полезные правила
- Правило трёх/пяти. На
&&
пока забиваем - это move-семантика, появилась в C++11, будет в конце семестра, там весело (теоретически похоже на ад, если стандарт читать, на практике применять просто). Пока что просто игнорируйте соответствующий конструктор и оператор. -
delete
иdelete[]
*корректно* разбирают случай "аргумент -NULL
", просто ничего не делает. Дополнительные проверки не нужны.
Примерные правила оценки лабораторных
Это больше руководство для меня и контрольные точки, чем чёткие правила; баллы могут сниматься и по другим причинам. Апелляции подавать можно и нужно - я мог что-то не заметить (например, что вы что-то на самом деле сделали, или что это ещё не проходили, или что в заданее не требуется), мог сделать слишком жёсткую систему оценки (тогда мы обсудим это с коллегами). Если что-то непонятно - задавайте вопросы.
Лабораторная 11 (I/O и полиморфизм)
Итак, 10 баллов распределяются примерно следующим образом:
- За прохождение тестов:
- 3 балла, если прошло всё и сразу.
- 2 балла, если потребовалось косметически поменять формат вывода текста (вроде `SalaryManager` и `Salary Manager`).
- 1 балл, если работает только текст (возможно, после косметических исправлений) или программа исходно не компилировалась.
- 0 баллов, если не удалось простыми изменениями заставить заработать.
- За Valgrind:
- 2 балла, если претензий нет.
- 1 балл, если есть только утечки памяти.
- 0 баллов, если есть undefined behavior вроде чтения из неинициализированной памяти.
- За качество и корректность интерфейсов классов (включая поля) и функций:
- 2 балла, если претензий нет.
- 1 балл, если в целом идея верная, но сделали что-то не слишкои опасное (открыты лишние методы), или что-что, что обнаружится на этапе компиляции (забыли const qualifier).
- 0 баллов, если интерфейс опасен (невиртуальный деструктор, забыли закрыть оператор присваивания/конструктор копирования).
- За качество и корректность реализации ставится от 0 до 3 баллов и снимаются за:
- -1 балл, если есть обширное дублирование кода, от которого можно избавиться (например, вынести в предка).
- -1 балл за скрытые ограничения (вроде фиксированной максимальной длины строки).
- -1 балл за серьёзное несоответствие "традициям" языка C++ или за неожиданную логику программы (нумерация массивов с единицы, реализация больших нешаблонных методов в header'ах, лишний код).