Библиотека собеса по C++ | вопросы с собеседований
Вопросы с собеседований по C++ и ответы на них. Список наших каналов: https://t.me/proglibrary/8353 Учиться у нас: https://proglib.io/w/907158ab Обратная связь: @proglibrary_feedback_bot По рекламе: @proglib_adv Прайс: @proglib_advertising
Ko'proq ko'rsatish7 205
Obunachilar
+624 soatlar
+307 kunlar
-1 34830 kunlar
- Kanalning o'sishi
- Post qamrovi
- ER - jalb qilish nisbati
Ma'lumot yuklanmoqda...
Obunachilar o'sish tezligi
Ma'lumot yuklanmoqda...
🧨 Как установить, очистить и переключить один бит?
❗️Установка бита
- Используется побитовый оператор OR (|), чтобы установить n-й бит number в 1 значение
- Стоит помнить, что сдвиг больше, чем на ширину типа, является неопределенным поведением
typedef unsigned long ulong;
ulong bit_set(ulong number, ulong n) {
return number | ((ulong)1 << n);
}
❗️Очистка бита
- Используется побитовый оператор AND (&) , чтобы установить n-й бит number в 0 значение
- Вы должны инвертировать битовую строку с помощью побитового оператора NOT (~) , затем оператор &
ulong bit_clear(ulong number, ulong n) {
return number & ~((ulong)1 << n);
}
❗️Переключение бита
- Используйте побитовый оператор XOR (^) для переключения n-го бита number
ulong bit_toggle(ulong number, ulong n) {
return number ^ ((ulong)1 << n);
}
❗️Проверка бита
- Чтобы проверить бит, сдвиньте number вправо на n бит , затем воспользуйтесь &
bool bit_check(ulong number, ulong n) {
return (number >> n)& (ulong)1;
}
👍 5
🌳 Как объявить интерфейс в C ++?
В C++ интерфейсом можно считать класс с чисто виртуальными методами
Чисто виртуальный метод - это метод класса, который определяется как виртуальный и которому присваивается значение 0
class ITest
{
public:
virtual ~ITest() {}
virtual void Method() = 0;
};
class MainTest : public ITest
{
public:
virtual void Method() override
{
}
};
👍 6😁 1
🍔 Дополнительный код
Дополнительный код (или two's complement) — это умный способ хранения целых чисел, позволяющий очень легко реализовать распространенные математические задачи. В основном используется потому что легко представлять отрицательные числа
🥝 Основные принципы
- для нуля используем 0
- для положительных целых чисел используем значения от 1 и до 2 в степени (количество битов-1) минус 1
- для отрицательных чисел инвертируем бинарное представление и добавляем единицу — это и есть дополнительный код
🍎 Примеры (бинарное представление = значение)
• 0000 = 0
• 0001 = 1
• 0010 = 2
• 1111 = -1
• 1110 = -2
• 1101 = -3
🔥 5👍 1
🍔 В чём разница между std::endl и '\n'?
❗ Единственное существенное различие между std::endl и '\n' в том, что std::endl очищает буфер вывода и результат сразу выводится, а '\n' — это просто символ и сайдэффектов не имеет
❗ Если программа требовательная к ресурсам, то стоит пользоваться '\n' и изредка вызывать std::flush для очистки буфера
👍 11
🔮 Что такое обрезка объектов?
Обрезка объектов (или object slicing) — это возможность присвоить объект класса-наследника экземпляру базового класса. Называется обрезкой, потому что часть информации исчезает (обрезается)
class Base {
int base_var;
};
class Derived: public Base {
int der_var;
};
int main () {
Base base;
Derived der = base;
}
❗️В примере информация об переменной der_var исчезает и её уже никак не восстановить
❗️Для решение проблемы можно использовать указатель или ссылку, тогда новый объект не создаётся, а мы просто пользуемся наследником как базовым👍 1
🔮 Что такое обрезка объектов?
Обрезка объектов (или object slicing) — это возможность присвоить объект класса-наследника экземпляру базового класса. Называется обрезкой, потому что часть информации исчезает (обрезается)
```
class Base {
int base_var;
};
class Derived: public Base {
int der_var;
};
int main () {
Base base;
Derived der = base; // информация об переменной der_var исчезает и её уже никак не восстановить
}
```
❗️Для решение проблемы можно использовать указатель или ссылку, тогда новый объект не создаётся, а мы просто пользуемся наследником как базовым
Стать профессионалом в IT, наполнить портфолио интересными проектами и успешно пройти техническое собеседование в одну из крупнейших российских IT-компаний 👨💻
А также развить алгоритмическое мышление и просто провести свободное время с пользой 🕺
Участвуй во Всероссийском чемпионате по алгоритмическому программированию RuCode.СТАРТ. Индивидуальный онлайн-контест пройдет уже 19 мая.
👍 2🔥 2🥰 1🤔 1
🍊 Что такое placement new?
Placement new - это специальный вид оператора new, который позволяет создать объект в уже выделенной памяти
char *buffer = new char[1024];
string *str_point = new (buffer) string("hi"); // placement new
❗️В основном необходимо, если мы не хотим запрашивать у операционной системы выделения памяти или когда у нас есть менеджер памяти и нельзя в обход него выделять память
‼️ Следует учитывать, что деструкторы для таких объектов придётся вызывать вручную, потому что при освобождении памяти они автоматически не вызоваются👍 5🔥 1🥰 1
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
🧨 Как очистить stringstream?
Для очистки содержимого строкового потока можно использовать:
m.str("");
или
m.str(std::string());
что может быть более эффективно, из-за того что не вызываем конструктор std::string(const char*)