C++ собеседования
806 subscribers
106 photos
222 links
Подготовка к собеседованиям на позицию C/C++ разработчик

Еще больше на сайте https://frontview-it.ru

Backend собеседования - @frontview_backend
C/C++ работа - @frontview_cpp_vacancies
Все IT вакансии - @frontview_all_vacancies
Download Telegram
😎 std::variant — это тип, который может содержать один из нескольких типов. Это альтернатива union, но с поддержкой типов, которые имеют нестандартные конструкторы и деструкторы.

#include <variant>
#include <iostream>

int main() {
std::variant<int, double, std::string> data;

data = 10;
std::cout << std::get<int>(data) << std::endl;

data = 3.14;
std::cout << std::get<double>(data) << std::endl;

data = "Hello";
std::cout << std::get<std::string>(data) << std::endl;

return 0;
}


😎 std::variant позволяет безопасно переключаться между типами, используя std::get для доступа к текущему значению.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍112
🟢 Константный указатель (T* const) — это указатель, адрес которого нельзя изменить после инициализации. Значение, на которое он указывает, может изменяться.

int value = 10;
int* const ptr = &value;
*ptr = 20; // OK
ptr = &anotherValue; // Ошибка


🟢 Указатель на константу (const T*) позволяет изменять адрес, но не значение, на которое он указывает.

const int value = 10;
const int* ptr = &value;
ptr = &anotherValue; // OK
*ptr = 20; // Ошибка


Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥21
Поток — это объект, который позволяет выполнять параллельные вычисления. Создать поток можно с помощью класса std::thread, передав ему функцию или лямбда-выражение, которое будет выполняться в этом потоке.

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥1
🪅 nullptr — это ключевое слово, введенное в стандарте C++11, которое представляет собой указатель на нулевой адрес. Оно заменяет использование NULL, который в C++ является просто макросом, определенным как 0. Использование nullptr улучшает безопасность и ясность кода, так как он имеет тип std::nullptr_t, что позволяет избежать неоднозначностей при перегрузке функций.


void foo(int* ptr) {
// Функция принимает указатель на int
}

void foo(double val) {
// Функция принимает double
}

foo(nullptr); // Вызовет foo(int*), так как nullptr имеет тип указателя


🪅 nullptr помогает избежать ошибок, связанных с неявным преобразованием типов, и делает код более читаемым.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥1
📌 Структура — это пользовательский тип данных, который позволяет объединять данные разных типов. Она используется для группировки связанных данных в одном объекте, что упрощает управление и организацию данных.

〰️ Структуры могут содержать переменные (поля) и функции (методы). В отличие от классов, по умолчанию все члены структуры имеют публичный доступ.


#include <iostream>

// Определение структуры
struct Point {
int x;
int y;

// Метод для вывода координат
void print() {
std::cout << "Point(" << x << ", " << y << ")" << std::endl;
}
};

int main() {
// Создание экземпляра структуры
Point p;
p.x = 10;
p.y = 20;

// Вызов метода структуры
p.print(); // Вывод: Point(10, 20)
}


〰️ Структуры полезны для моделирования объектов с несколькими свойствами, таких как точки, координаты и т.д.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
Исключение — это механизм обработки ошибок, который позволяет программе реагировать на аномальные или неожиданные ситуации, возникающие во время выполнения, путем передачи управления специальным блокам кода.

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥31
🔹 Лямбда-выражение — это анонимная функция, которая может быть определена в месте, где она используется. Оно позволяет создавать функции без необходимости их именования, что упрощает код и делает его более гибким.

🔹 Синтаксис лямбда-выражения включает в себя захват переменных, параметры, тело функции и возвращаемый тип.


auto sum = [](int a, int b) -> int {
return a + b; // Возвращает сумму a и b
};


🔹 Лямбда-выражения часто используются в алгоритмах стандартной библиотеки, таких как std::for_each или std::sort.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍83
Наследование позволяет создавать новые классы на основе существующих. Это способствует повторному использованию кода и организации иерархий классов. Базовый класс передаёт свои свойства и методы производному классу.


#include <iostream>
using namespace std;

// Базовый класс
class Animal {
public:
void eat() {
cout << "Eating..." << endl;
}
};

// Производный класс
class Dog : public Animal {
public:
void bark() {
cout << "Barking..." << endl;
}
};

int main() {
Dog dog;
dog.eat(); // Наследованный метод
dog.bark(); // Собственный метод
return 0;
}


Производный класс Dog наследует метод eat() от базового класса Animal.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍91
Makefile — это файл, используемый утилитой make для автоматизации процесса сборки программ. Он содержит набор правил и инструкций, которые определяют, как компилировать и связывать проект, упрощая управление зависимостями и ускоряя сборку.

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍92👨‍💻1
⬇️ Поток — это абстракция для работы с последовательностями данных, таких как файлы, консольный ввод/вывод и строки. Потоки позволяют читать и записывать данные в унифицированной форме.

🔵Для создания потока в C++ можно использовать стандартные библиотеки, такие как <iostream> для консольного ввода/вывода и <fstream> для работы с файлами.Пример создания потока для чтения из файла:


#include <fstream>
#include <iostream>
#include <string>

int main() {
std::ifstream file("example.txt"); // Создание потока для чтения из файла
std::string line;
if (file.is_open()) {
while (getline(file, line)) { // Чтение файла построчно
std::cout << line << std::endl; // Вывод строки на консоль
}
file.close(); // Закрытие файла
} else {
std::cerr << "Не удалось открыть файл" << std::endl;
}
return 0;
}


Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Адресная арифметика — это техника работы с указателями, позволяющая перемещаться по элементам массива или структуры данных, изменяя адрес, на который указывает указатель. Она используется для эффективного доступа к элементам памяти, особенно в низкоуровневом программировании, где важна скорость и контроль над памятью.

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥2
Шаблон функции позволяет создавать функции, которые работают с различными типами данных, не дублируя код. Это достигается за счет использования параметров шаблона, которые заменяются конкретными типами во время компиляции.

Объявление шаблона функции начинается с ключевого слова template, за которым следует список параметров шаблона в угловых скобках. Пример:


template <typename T>
T add(T a, T b) {
return a + b; // Функция складывает два значения типа T
}


*️⃣ В данном примере T — это параметр шаблона, который будет заменен на конкретный тип данных при вызове функции add.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
STL (Standard Template Library) — это библиотека шаблонов, предоставляющая набор стандартных классов и функций для работы с коллекциями данных. Основные компоненты STL включают контейнеры (такие как векторы и списки), алгоритмы (например, сортировка и поиск) и итераторы, которые обеспечивают доступ к элементам контейнеров.

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥3
🛑weak_ptr — это умный указатель, который предоставляет неблокирующую ссылку на объект, управляемый shared_ptr. Он не увеличивает счетчик ссылок на объект, что помогает избежать циклических зависимостей и утечек памяти.

🛑weak_ptr используется для проверки существования объекта и получения shared_ptr, если объект еще существует. Для этого применяется метод lock(), который возвращает shared_ptr.

#include <iostream>
#include <memory>

class Node {
public:
std::weak_ptr<Node> next; // Слабая ссылка на следующий узел
};

int main() {
auto node1 = std::make_shared<Node>();
auto node2 = std::make_shared<Node>();

node1->next = node2; // Установка слабой ссылки

if (auto sharedNext = node1->next.lock()) {
std::cout << "Next node is alive\n";
} else {
std::cout << "Next node is expired\n";
}
}


Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🤩1
Конструктор — это специальный метод класса, который автоматически вызывается при создании объекта и инициализирует его. Деструктор — это метод, который вызывается при удалении объекта и освобождает ресурсы, занимаемые объектом, такие как память или файлы.

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥2
😎 Механизм обработки исключений позволяет управлять ошибками и исключительными ситуациями в программе. Он основан на ключевых словах try, catch и throw.


try {
// Код, который может вызвать исключение
if (errorCondition) {
throw std::runtime_error("Error occurred");
}
} catch (const std::exception& e) {
// Обработка исключения
std::cout << "Exception caught: " << e.what() << std::endl;
}


😎 try блок содержит код, который может вызвать исключение. throw используется для генерации исключения. catch блок перехватывает и обрабатывает исключение, предоставляя возможность восстановить выполнение программы.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7👨‍💻1
Профилирование — это процесс анализа производительности программы с целью выявления узких мест и оптимизации использования ресурсов, таких как процессорное время и память. Оно необходимо для повышения эффективности и скорости работы приложения, особенно в ресурсозатратных системах.

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥2
📝 std::enable_if — это шаблон, используемый для реализации SFINAE (Substitution Failure Is Not An Error). Он позволяет включать или исключать функции и классы из перегрузки на этапе компиляции в зависимости от выполнения определённых условий.


#include <type_traits>

// Функция доступна только для целых типов
template <typename T>
typename std::enable_if<std::is_integral<T>::value, T>::type
foo(T value) {
return value * 2;
}

// Функция доступна только для вещественных типов
template <typename T>
typename std::enable_if<std::is_floating_point<T>::value, T>::type
foo(T value) {
return value / 2;
}


➡️ std::enable_if помогает создавать более безопасный и гибкий код, контролируя доступность функций на основе типов.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍61
Файл открывается с использованием потоков ввода-вывода, таких как `ifstream` для чтения и `ofstream` для записи, которые предоставляются библиотекой `<fstream>`. Для открытия файла необходимо создать объект потока и вызвать метод `open()`, указав имя файла и режим открытия, либо использовать конструктор потока с теми же параметрами.

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍61🔥1
🔥 vector и list — это контейнеры STL, но они имеют разные структуры и характеристики.

▶️ vector — это динамический массив, который обеспечивает быстрый доступ к элементам по индексу и эффективное добавление элементов в конец. Однако вставка или удаление элементов в середине может быть медленной, так как требует сдвига элементов.

▶️ list — это двусвязный список, который позволяет быстро вставлять и удалять элементы в любом месте, но доступ к элементам по индексу медленный, так как требует последовательного обхода.

Выбор между ними зависит от требований к производительности операций доступа и модификации.

Ставь 👍, если было полезно!
Больше ответов на сайте 👈

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍62