С++, 1 курс, 3 группа, 2 семестр, 2016/17 — различия между версиями

Материал из SEWiki
Перейти к: навигация, поиск
(Общие знания)
(Общие знания)
Строка 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 и попыток сдачи *лабораторных* (для домашек будут особенности):

  1. Дедлайн железобетонный в 23:59. Если проверяю до дедлайна - беру последнюю версию. После после - последнюю, которая закоммичена до 23:59. Проверяйте, что все файлы добавились в репозиторий.
  2. Проверяю по возможности, одна попытка есть всегда, если успеваете отреагировать на замечания до дедлайна - то получается две, три, и так далее.
  3. К сожалению, пока что проверяю только в воскресенье днём-вечером, так что скорее попытка одна. Возможно, в будущем это изменится.
  4. Жёстких ограничений на количество попыток сдачи нет, но спамить не стоит. Процесс сдачи итеративный, но не интерактивный.
  5. Вы можете задавать вопросы в течение недели по любой теме: теория, "как правильно", "можно ли сделать так", "почему вот такой вот код на таком тесте выдаёт X, а не Y" (обязательно наличие кода и каких-то подробностей вроде "вот отчёт Valgrind и тест из одной строчки, с int работает, с Product - нет" - как на StackOverflow), "есть ли бросающиеся в глаза стилистические замечания?"
  6. Про проверку стиля в течение недели: не обещаю, что буду проверять так же внимательно, как и на "реальной" попытке сдачи. Можно присылать и куски кода, и общие вопросы ("куда класть тесты для вектора"), и весь проект целиком. Чем меньше кусок кода - тем быстрее и качественнее получите ответ.

Полезные правила

  • Правило трёх/пяти. На && пока забиваем - это move-семантика, появилась в C++11, будет в конце семестра, там весело (теоретически похоже на ад, если стандарт читать, на практике применять просто). Пока что просто игнорируйте соответствующий конструктор и оператор.
  • delete и delete[] *корректно* разбирают случай "аргумент - NULL", просто ничего не делает. Дополнительные проверки не нужны.

Примерные правила оценки лабораторных

Это больше руководство для меня и контрольные точки, чем чёткие правила; баллы могут сниматься и по другим причинам. Апелляции подавать можно и нужно - я мог что-то не заметить (например, что вы что-то на самом деле сделали, или что это ещё не проходили, или что в заданее не требуется), мог сделать слишком жёсткую систему оценки (тогда мы обсудим это с коллегами). Если что-то непонятно - задавайте вопросы.

Лабораторная 11 (I/O и полиморфизм)

Итак, 10 баллов распределяются примерно следующим образом:

  1. За прохождение тестов:
    • 3 балла, если прошло всё и сразу.
    • 2 балла, если потребовалось косметически поменять формат вывода текста (вроде `SalaryManager` и `Salary Manager`).
    • 1 балл, если работает только текст (возможно, после косметических исправлений) или программа исходно не компилировалась.
    • 0 баллов, если не удалось простыми изменениями заставить заработать.
  2. За Valgrind:
    • 2 балла, если претензий нет.
    • 1 балл, если есть только утечки памяти.
    • 0 баллов, если есть undefined behavior вроде чтения из неинициализированной памяти.
  3. За качество и корректность интерфейсов классов (включая поля) и функций:
    • 2 балла, если претензий нет.
    • 1 балл, если в целом идея верная, но сделали что-то не слишкои опасное (открыты лишние методы), или что-что, что обнаружится на этапе компиляции (забыли const qualifier).
    • 0 баллов, если интерфейс опасен (невиртуальный деструктор, забыли закрыть оператор присваивания/конструктор копирования).
  4. За качество и корректность реализации ставится от 0 до 3 баллов и снимаются за:
    • -1 балл, если есть обширное дублирование кода, от которого можно избавиться (например, вынести в предка).
    • -1 балл за скрытые ограничения (вроде фиксированной максимальной длины строки).
    • -1 балл за серьёзное несоответствие "традициям" языка C++ или за неожиданную логику программы (нумерация массивов с единицы, реализация больших нешаблонных методов в header'ах, лишний код).