C++ собеседования
846 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
👉 Для создания объекта класса сначала необходимо определить класс. Например:

class Car {
public:
std::string model;
int year;

// Конструктор класса
Car(std::string m, int y) : model(m), year(y) {}
};


👉 После определения класса объект создается следующим образом:

Car myCar("Toyota", 2020); // Создание объекта myCar с использованием конструктора


👉 Объект myCar теперь имеет доступ к членам класса Car, таким как model и year.

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

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

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍51
💥 Популярные библиотеки для работы с базами данных на C++ включают в себя SOCI, которая предоставляет простой интерфейс для взаимодействия с различными СУБД, и libpqxx, которая является клиентской библиотекой для PostgreSQL. Также часто используются MySQL Connector/C++ для работы с MySQL и SQLite для легковесных встроенных баз данных.

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

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

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

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

😎 std::list — это двусвязный список. Он позволяет эффективно вставлять и удалять элементы в любом месте, но не поддерживает произвольный доступ к элементам. Это делает его идеальным для сценариев, где часто требуется вставка или удаление.

😎 std::deque — это двусторонняя очередь. Она поддерживает произвольный доступ, а также быструю вставку и удаление элементов с обоих концов. Это делает deque более универсальным, чем list, но с немного большей сложностью для операций вставки и удаления в середине.

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

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

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥2
👉 В C++ set и multiset — это контейнеры из библиотеки стандартных шаблонов (STL), которые хранят элементы в отсортированном порядке.

1⃣ set хранит уникальные элементы, не допускает дубликатов.

#include <set>
#include <iostream>

int main() {
std::set<int> s = {1, 2, 3};
s.insert(2); // Дубликат не добавится
for (int x : s) {
std::cout << x << " "; // Вывод: 1 2 3
}
}


2⃣ multiset позволяет хранить дубликаты.

#include <set>
#include <iostream>

int main() {
std::multiset<int> ms = {1, 2, 3};
ms.insert(2); // Дубликат добавится
for (int x : ms) {
std::cout << x << " "; // Вывод: 1 2 2 3
}
}


Основное отличие в том, что set не допускает дубликатов, а multiset — допускает.

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

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

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

👉 map основан на сбалансированном дереве поиска (обычно красно-черное дерево), что обеспечивает логарифмическое время доступа, вставки и удаления.

#include <iostream>
#include <map>

int main() {
std::map<int, std::string> m;
m[1] = "one"; // Вставка пары ключ-значение
m[2] = "two";

for (const auto& pair : m) {
std::cout << pair.first << ": " << pair.second << std::endl; // Вывод ключа и значения
}
}


map автоматически сортирует элементы по ключам.

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

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

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍61
➡️ delete и delete[] используются для освобождения памяти, выделенной в куче, но применяются в разных контекстах.

delete освобождает память, выделенную для одного объекта:

int* ptr = new int(5);
delete ptr; // Освобождает память для одного int


delete[] освобождает память, выделенную для массива объектов:

int* arr = new int[5];
delete[] arr; // Освобождает память для массива int


🙅‍♂️ Использование неправильного оператора может привести к неопределенному поведению. delete для массива не вызовет деструкторы всех элементов, а delete[] для одиночного объекта может вызвать ошибки.

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

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

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


#include <iostream>

union Data {
int intValue;
float floatValue;
char charValue;
};

int main() {
Data data;
data.intValue = 10; // Устанавливаем значение int
std::cout << "Int: " << data.intValue << std::endl;

data.floatValue = 3.14f; // Перезаписываем значение float
std::cout << "Float: " << data.floatValue << std::endl;

return 0;
}


Union полезен для экономии памяти, но требует осторожности, так как изменение одного члена может затронуть другие.

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

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

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


#include <type_traits>

template<typename T>
void check() {
// Проверка, является ли тип целочисленным
if (std::is_integral<T>::value) {
// Логика для целочисленных типов
}
}


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

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍51
typedef используется для создания псевдонимов типов данных, что упрощает чтение и поддержку кода. Он позволяет определять новые имена для существующих типов, что особенно полезно при работе с длинными или сложными объявлениями типов.

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍51
➡️ Inline функции позволяют компилятору вставлять код функции непосредственно в место её вызова, что может уменьшить накладные расходы на вызов функции и повысить производительность. Однако компилятор может проигнорировать запрос на inline, если функция слишком сложная или если её использование нецелесообразно.


#include <iostream>

inline int add(int a, int b) {
// Простая inline функция для сложения двух чисел
return a + b;
}

int main() {
int result = add(3, 4);
std::cout << "Result: " << result << std::endl;
}


Inline функции полезны для небольших, часто вызываемых функций.

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

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

✈️ С++ собеседования
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥2
❗️Основное отличие между массивами и векторами заключается в управлении памятью и гибкости.

Массив — это статический контейнер с фиксированным размером, который задаётся при создании. Размер массива не может изменяться в процессе выполнения программы.


int arr[5] = {1, 2, 3, 4, 5}; // Статический массив из 5 элементов


Вектор — это динамический массив, который может изменять свой размер в процессе выполнения. Вектор автоматически управляет памятью, увеличивая или уменьшая её при добавлении или удалении элементов.


#include <vector>
std::vector<int> vec; // Инициализация вектора
vec.push_back(1); // Добавление элемента
vec.push_back(2); // Вектор автоматически увеличивает размер


Векторы предлагают больше функционала, таких как автоматическое управление памятью и встроенные методы для работы с элементами, в то время как массивы обеспечивают более низкий уровень доступа к памяти и подходят для случаев, когда размер известен заранее.

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

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

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