Как сказал Бьярне, контроль доступа в C ++ предназначен для защиты от Мерфи, а не от Макиавелли.В общем, то же самое верно - его функции предназначены для защиты от несчастных случаев, а не от людей, умышленно совершающих что-то не так.
В некоторой степени использование C ++ означает, по крайней мере, некоторую степень доверия к другим людям, которые будутиметь доступ к вашему исходному коду.Если они хотят этого достаточно сильно, они могут все испортить, и вы ничего не можете сделать, чтобы остановить их.Если вы хотите наложить реальные ограничения на использование вашего кода, C ++ - неподходящий язык для ваших целей.
Редактировать: Это вовсе не «аргумент» - он просто указывает на основуна котором были приняты решения.Поскольку у меня есть моя копия D & E от ответа на предыдущий вопрос, я напишу немного больше, если она здесь 1 :
Это более важночтобы разрешить полезную функцию, чем предотвратить любое неправильное использование: Вы можете писать плохие программы на любом языке.Важно минимизировать вероятность случайного неправильного использования функций, и много усилий было потрачено на то, чтобы поведение по умолчанию конструкций C ++ было разумным или приводило к ошибкам во время компиляции.Например, по умолчанию проверяются все типы аргументов функций - даже через отдельные границы компиляции - и по умолчанию все члены класса являются закрытыми.Однако язык системного программирования не может помешать определенному программисту сломать систему, поэтому усилия по проектированию лучше тратить на обеспечение средств для написания хороших программ, чем на предотвращение неизбежных плохих.В долгосрочной перспективе программисты, кажется, учатся.Это вариант старого лозунга C "Доверяй программисту".Существуют различные правила проверки типов и контроля доступа, которые позволяют провайдеру класса четко указывать, что ожидается от пользователей, для защиты от несчастных случаев.Эти правила не предназначены для защиты от умышленного нарушения (§2.10).
В §2.10 он, среди прочего, говорит:
Задача системы защитычтобы убедиться, что любое такое нарушение системы типов является явным, и свести к минимуму необходимость таких нарушений.
Эти цели, по-видимому, были достигнуты здесь - для публикации защищенного члена базового класса определенно требуетсяявное действие в производном классе, и за 20 с лишним лет написания C ++ я не могу вспомнить, чтобы когда-либо нуждался (или даже желал) это сделать.
1 §4.3, стр.115, 116.