Что плохого в том, что вы пытаетесь получить доступ к закрытой переменной из другого класса, который не является другом.
Самый простой выход - сделать var
защищенным, а не частным, но это вводит дополнительные зависимости. Как правило, переменные должны быть закрытыми. Страуструп в своей книге «Дизайн и эволюция C ++» пожалел о введении protected
. Он считает защищенные данные приглашением к проблемам, и, по его опыту, в этом нет необходимости. Открытие элементов данных для произвольных манипуляций любым объявленным подклассом на самом деле не намного лучше, чем их публичное использование.
Когда возникает искушение использовать защищенные элементы данных, вы должны спросить себя, чего вы на самом деле пытаетесь достичь. Это явно построенный пример. Если для Child
была какая-то причина изменить var
, эту причину можно выразить в имени функции, и защищенные функции не так плохи, как защищенные члены данных.