Нарушается ли частное наследство? Не совсем.
Доступность в C ++ влияет только на то, в каких областях можно использовать идентификатор для ссылки на что-либо действительным образом. Система разработана для защиты от Мерфи, а не от макиавеллиевских уловок, которые вы используете.
reinterpret_cast
в основном вы говорите компилятору "забудьте то, что вы знаете, вместо этого верьте моему суждению" . Так оно и есть. Вы утверждаете, что это значение действительно относится к base
? Хорошо, по-твоему. Но компилятор не собирается ничего делать, чтобы защитить вас, он предполагает, что вы знаете, что делаете. Это может сломаться довольно легко. Вот пример @ Дани, и вот этот:
class derived : private base
{
public:
virtual ~derived() = default;
derived(int b):base(b) {};
};
Как вы думаете, что произойдет, если вы попытаетесь использовать c
и вызвать функцию-член, которая использует _a
? Что он найдет вместо этого?