void Stream::writeW(uint16_t x) {
write(&x, 2);
}
void Stream::seek(uint64_t x) { throw std::logic_error("This stream cannot seek!"); }
Для абстрактных интерфейсных классов не нужно делать вызов конструктора и производном классе из-за того, что в нем нет данных, а только функции
Вызов конструктора родителя делается для изменения данных такового, в случае с File проверяем доступность дескриптора вызовом конструктора HandleStream
File::File(const wchar_t* aFname, OpenMode aMode) : HandleStream(INVALID_HANDLE)
{
HANDLE newHandle = CreateFile(…);
if () {
open(newHandle);
} else {
// придумаем, что делать с ошибками
}
}
else rear->next = add; // Пристраиваем за тем, на который «смотрит» rear
rear = add; // Перенаправляем rear (нужно в обеих ветвях и вынесено за скобки)
Ведь теперь если я обращусь к rear->next то получу nullptr, ведь это последний элемент, куда же тогда теряется прошлая нода?
Не позволяет такого Си с крестами. Мы обязаны вызвать какой-то отцовский конструктор: хоть без параметров, но какой-то нужно.
Остальное верно.