В классе закрыто поле, а внешняя функция должна обращаться к нему без публичного метода. Как механизм friend меняет проверку доступа и остаётся ли такая функция членом класса?
База Hintsage
C++ Core
Синтаксис, типы, функции, классы и базовая семантика C++.
Практика
Вопросы: C++ Core
Представьте, что преобразование объекта производного класса к базовому доступно внутри самого класса, но запрещено вызывающему коду. Как это объясняется частным наследованием?
Объясните механизм преобразования указателя на объект производного класса к указателю на его базовый класс при множественном наследовании: почему числовой адрес указателя может измениться?
В чём принципиальная опасность привязки временного объекта к ссылочному члену в списке инициализации конструктора?
В ромбовидной иерархии наследования зачем базовый класс делают виртуальным?
Если конструктор объекта выбрасывает исключение, какие части объекта будут уничтожены?
В производном классе используют конструктор базового класса через using. Определите, как будут инициализированы базовая часть и собственное поле объекта:
#include <cassert>
struct Base {
explicit Base(int value) : value(value) {}
int value;
};
struct Derived : Base {
using Base::Base;
int status = 42;
};
int main() {
Derived object(7);
assert(object.value == 7);
assert(object.status == 42);
}
Объясните механизм выбора и выполнения унаследованного конструктора.
В производном классе вызов read(Base&) не компилируется, хотя Base::value унаследован. Укажите причину, опираясь на статический тип выражения объекта.
struct Base {
protected:
int value = 42;
};
struct Derived : Base {
int read(Derived& object) {
return object.value;
}
int read(Base& object) {
return object.value;
}
};
Если конструктор делегирует создание объекта другому конструктору того же класса, какой конструктор отвечает за инициализацию членов и что произойдёт при попытке дополнительно указать инициализаторы?
При обработке исключения сравните перехват базового типа по значению и по константной ссылке: какой вариант сохраняет полиморфизм выброшенного объекта?
При добавлении пользовательского конструктора к классу сохраняется ли возможность агрегатной инициализации?
Какие гарантии даёт volatile при доступе к объекту и почему он не заменяет std::atomic?
Определите, какую гарантию даёт constinit переменной со статическим временем хранения и чего эта гарантия не обещает.
Почему указатель на нестатический метод класса нельзя вызвать как обычный указатель на функцию?
Как объяснить, почему указатель на предварительно объявленный класс допустим до определения класса, а объект этого типа — нет?
Что меняется при передаче значения enum class в функцию, принимающую целое число?
Допустим, указатель на объект равен nullptr. Можно ли безопасно вызвать через него нестатический метод, если тело метода не обращается к полям объекта?
Обоснуйте разницу между выбором виртуальной функции и выбором аргумента по умолчанию при вызове через базовый тип.
Какой механизм C++ делает невозможным объявление статической функции-члена виртуальной?
Как аргумент-зависимый поиск имён позволяет неквалифицированному вызову найти свободную функцию в пространстве имён типа аргумента?
Показано 1–20 из 50