На английском эти ключевые слова (public, private, protected) называются Access specifiers.
https://en.cppreference.com/w/cpp/language/access
Думаю, становится очевидным для чего они из названия.
Если вы хотите скрыть значения от программи по типу Art Money (которая просто сканирует RAM), то вам нужно, каким-либо образом их зашифровать воспрепятствовать простому способу чтения вашей переменной из памяти.
Например, вы можете хранить не сами значения, а их хеш или, например, хранить их с определенным смещением (скажем, денег у вас в игре 100, а в переменной у вас хранится на 5x + 7 денег больше, просто чтобы запутать тех, кто захочет вас взломать). Можете также преобразовать число в строку и как-то хитро изменить (например реверсировать). Все эти способы несколько усложнят прямое чтение переменной из памяти, основываясь лишь на значении в GUI. Но вот ничто не мешает реверс-инженеру пойти и посмотреть что у вас сейчас на вершине стека сейчас у вашего процесса и таким образом понять где искать саму переменную, которая хранит количество денег в игре. Это, конечно же, в разы сложнее и снизит количество людей, которые смогу "взломать" вашу программу с помощью ArtMoney.
Чтобы ещё сильнее усложнить жизнь взломщикам можно вовсе вынести значение переменной из памяти (то есть копия значения у вас в памяти все ещё есть, но вот увеличение/уменьшение значения переменной происходит через посредника, например, сервер, базу данных, файл, subprocess. Возможно, прожженные игроделы подскажут и более простые/интересные способы.