Свойства как общая концепция языка, технически предшествующие C ++, например в Smalltalk, но они никогда не были частью стандарта. Геттеры и сеттеры были концепцией, используемой в C ++, когда она использовалась для разработки пользовательских интерфейсов, но, по правде говоря, это дорогое предложение для разработки пользовательских интерфейсов на языке, который фактически является системным языком. Общая проблема с геттерами и сеттерами в C ++ заключалась в том, что, поскольку они не были стандартом, у всех был свой стандарт.
А в системных языках, где проблемы с эффективностью высоки, просто проще сделать саму переменную общедоступной, хотя есть много литературы, которая сильно осуждает эту практику. Зачастую вы просто видите более богатый обмен информацией между экземплярами объектов C ++, чем простые элементы.
Вы, вероятно, получите много точек зрения в ответ на этот вопрос, но в целом C ++ должен был быть C, который делал объекты, делая ООП доступным для разработчиков, которые не знали объектов. Было достаточно сложно перевести виртуальные языки и шаблоны на язык, и я думаю, что какое-то время они были немного застойными.
Java отличается тем, что в начале, благодаря тому, что Java привнесла в такие области, как сборка мусора, было легче продвигать философию надежной инкапсуляции, то есть внешние сущности должны держать свои грязные маленькие лапы вдали от внутренних элементов класса.
Я признаю, что это довольно распространенное мнение - в настоящее время я использую C ++ для высокооптимизированных вещей, таких как конвейеры трехмерной графики, - мне уже нужно управлять всей моей объектной памятью, поэтому я бы смутно рассмотрел абсолютно бесполезный код, который просто служит для того, чтобы обернуть доступ к хранилищу дополнительными функциями. При этом базовые возможности производительности, такие как MSFT .net ILM, позволяют защищать позицию, которую иногда трудно защитить
Чисто мой 2с