Прежде всего, для доступа к переменной экземпляра, которую вы не можете использовать
foo.bar_ = newObject;
, вам нужно использовать
foo->bar_ = newObject;
(конечно, bar_ i-var должен быть объявленкак публичный, если вы не хотите получать ошибку компилятора- это приведет к увеличению сложности кода.
Другая причина использования свойств, переопределение установщика или получателя, позволит вам выполнять пользовательские действия при присваивании или разрешении значения.
Но основная причиназдесь, если вы не знакомы с принципами ООП - абстракция.Пользователи вашего класса не должны знать, как ваш класс реализован внутри, иначе вы получите слишком много жестких зависимостей в вашем коде.И будет действительно сложно что-то выделять, обновлять или поддерживать.