Перегрузка операторов
Ключевое слово operator позволяет изменить работу конкретного оператора с экземплярами класса. Это дает оператору дополнительное значение — "перегружает" его. Компилятор различает разные значения оператора, проверяя типы его операндов.
В примере оператор + перегружается для сложения двух комплексных чисел.
Ключевое слово operator позволяет изменить работу конкретного оператора с экземплярами класса. Это дает оператору дополнительное значение — "перегружает" его. Компилятор различает разные значения оператора, проверяя типы его операндов.
В примере оператор + перегружается для сложения двух комплексных чисел.
Может ли класс в С++ реализовывать сразу несколько интерфейсов?
Anonymous Quiz
44%
Да, интерфейсов можно реализовывать сколько угодно
8%
Нет, класс одновременно может реализовать только 1 интерфейс
32%
Интерфейсов как конструкции языка вообще нет в С++
16%
Реализовать можно только 1, а вот наследоваться от любого количества
#Вопросы_с_собеседования
❓Можно ли в C++ умножать или делить целое значение на степени двойки, не используя операций "*" или "/"?
Это можно делать в любом языке, где есть побитовый сдвиг. Умножению значения x на 2, например, соответствует операция x << 1, а делению y на 4 - действие y >> 2.
❓Можно ли в C++ умножать или делить целое значение на степени двойки, не используя операций "*" или "/"?
Это можно делать в любом языке, где есть побитовый сдвиг. Умножению значения x на 2, например, соответствует операция x << 1, а делению y на 4 - действие y >> 2.
#Вопросы_с_собеседования
Как сгенерировать pure virtual function call исключение?
Ответ:
Нужно вызвать чисто виртуальный метод в конструкторе родительского класса т.е. до создания дочернего, в котором этот метод реализован. Т.к. современный компилятор не даст это сделать напрямую, то нужно будет использовать промежуточный метод.
Как сгенерировать pure virtual function call исключение?
Ответ:
Нужно вызвать чисто виртуальный метод в конструкторе родительского класса т.е. до создания дочернего, в котором этот метод реализован. Т.к. современный компилятор не даст это сделать напрямую, то нужно будет использовать промежуточный метод.
#Вопросы_с_собеседования
Что дают разные модификаторы при наследовании?
Ответ:
Изменяют зону видимости членов базового класса.
При private наследовании protected и public члены становятся private. При protected наследовании public становится protected. А при public ничего не изменяется.
Что дают разные модификаторы при наследовании?
Ответ:
При private наследовании protected и public члены становятся private. При protected наследовании public становится protected. А при public ничего не изменяется.
This media is not supported in your browser
VIEW IN TELEGRAM
Как написать «Змейку» на C++ в четыре переменные?
Пишем классическую «Змейку», как на КДПВ, в четыре переменные.
Смотреть статью
Пишем классическую «Змейку», как на КДПВ, в четыре переменные.
Смотреть статью
Могут ли ссылки отсылать к недопустимому местоположению в памяти в C++?
В C++ ссылки более безопасны, чем указатели, потому что ссылки должны быть инициализированы, и их нельзя изменить, чтобы ссылаться на что-то другое после инициализации. Но есть исключения, когда у нас могут быть недействительные ссылки, они приведены на картинке.
В C++ ссылки более безопасны, чем указатели, потому что ссылки должны быть инициализированы, и их нельзя изменить, чтобы ссылаться на что-то другое после инициализации. Но есть исключения, когда у нас могут быть недействительные ссылки, они приведены на картинке.
Восемь неочевидных вещей в шаблонах С++
Материал будет полезен начинающим разработчикам, которые знакомятся с шаблонами, а также специалистам уровня middle, которые используют шаблоны время от времени.
Смотреть статью
Материал будет полезен начинающим разработчикам, которые знакомятся с шаблонами, а также специалистам уровня middle, которые используют шаблоны время от времени.
Смотреть статью
Алгоритм compare
Если вызывающая строка меньше строки s, то функция возвращает -1 (отрицательное значение). Если вызывающая строка больше строки s, функция возвращает 1 (положительное значение). Если две строки равны, функция возвращает 0.
Подробнее про алгоритм можно почитать здесь.
Если вызывающая строка меньше строки s, то функция возвращает -1 (отрицательное значение). Если вызывающая строка больше строки s, функция возвращает 1 (положительное значение). Если две строки равны, функция возвращает 0.
Подробнее про алгоритм можно почитать здесь.
Функция map::at()
Map - это контейнер в STL, который используется для хранения элементов в виде пары ключ-значение. Внутренне элементы map всегда сортируются по ее ключу. Карты в основном реализованы в виде бинарных деревьев поиска.
Функция
Map - это контейнер в STL, который используется для хранения элементов в виде пары ключ-значение. Внутренне элементы map всегда сортируются по ее ключу. Карты в основном реализованы в виде бинарных деревьев поиска.
Функция
map::at() используется для возврата ссылки на элемент, связанный с ключом k.#Вопросы_с_собеседования
Сколько раз будет выполняться этот цикл?
Если бы вы сказали 300, а i был объявлен как int, вы были бы правы. Но поскольку i объявлен как unsigned char, правильный ответ – зацикливание (бесконечный цикл).
Объясняем. Выражение 2 * half_limit будет повышаться до int (на основе правил преобразования C++) и заимеет значение 300. Но так как i – это unsigned char, он пересматривается по 8-битному значению, которое после достижения 255 будет переполняться, поэтому вернется к 0, и цикл будет продолжаться вечно.
Сколько раз будет выполняться этот цикл?
Объясняем. Выражение 2 * half_limit будет повышаться до int (на основе правил преобразования C++) и заимеет значение 300. Но так как i – это unsigned char, он пересматривается по 8-битному значению, которое после достижения 255 будет переполняться, поэтому вернется к 0, и цикл будет продолжаться вечно.
#Вопросы_с_собеседования
❓Какие специальные функции-члены может генерировать сам компилятор? Напишите их сигнатуру?
Ответ:
Компилятор может сам генерировать шесть функций.
• Конструктор по умолчанию;
Object();
• деструктор;
~Object();
• копирующий конструктор;
Object(const Object& oth);
• оператор копирующего присваивания;
Object& operator=(const Object& oth);
• перемещающий конструктор;
Object(Object&& oth);
• оператор перемещающего присваивания;
Object& operator=(Object&& oth);
❓Какие специальные функции-члены может генерировать сам компилятор? Напишите их сигнатуру?
Ответ:
• Конструктор по умолчанию;
Object();
• деструктор;
~Object();
• копирующий конструктор;
Object(const Object& oth);
• оператор копирующего присваивания;
Object& operator=(const Object& oth);
• перемещающий конструктор;
Object(Object&& oth);
• оператор перемещающего присваивания;
Object& operator=(Object&& oth);
Что выведет код?
Anonymous Quiz
29%
0
38%
У программы неопределенное поведение
19%
Compiler Error
14%
Другое
Удаление элементов
Для удаления элементов из контейнера list могут применяться следующие функции:
clear(p): удаляет все элементы
pop_back(): удаляет последний элемент
pop_front(): удаляет первый элемент
erase(p): удаляет элемент, на который указывает итератор p. Возвращает итератор на элемент, следующий после удаленного, или на конец контейнера, если удален последний элемент
erase(begin, end): удаляет элементы из диапазона, на начало и конец которого указывают итераторы begin и end. Возвращает итератор на элемент, следующий после последнего удаленного, или на конец контейнера, если удален последний элемент
Применение всех функций представлено на картинке.
Для удаления элементов из контейнера list могут применяться следующие функции:
clear(p): удаляет все элементы
pop_back(): удаляет последний элемент
pop_front(): удаляет первый элемент
erase(p): удаляет элемент, на который указывает итератор p. Возвращает итератор на элемент, следующий после удаленного, или на конец контейнера, если удален последний элемент
erase(begin, end): удаляет элементы из диапазона, на начало и конец которого указывают итераторы begin и end. Возвращает итератор на элемент, следующий после последнего удаленного, или на конец контейнера, если удален последний элемент
Применение всех функций представлено на картинке.