Своими словами:
public может использоваться во всех методах и классах. Он доступен везде. Не защищён. К примеру у вас есть:
public:
string name = "Anton";
И эту переменную, которая находится в public, могут использовать все. Её можно поменять откуда угодно. Надеюсь понятно.
Пример:
class Toster
{
public:
string text = "public может использоваться во всех методах и классах. Он доступен везде. Не защищён";
}
...
class Stackoverflow
{
public:
Toster toster;
toster.text = "Обнулил :D";
// То есть его можно использовать везде. А вот с private так не получится.
}
...
А private - это защищённый метод, чаще всего его используют что бы не накосячить с кодом или что бы кто то не накосячил в твоём коде. Да и вообще это вроде как принятно в ООП (Инкапсуляция). Private может использоваться только внутри класса. То есть что бы никто не изменил твою переменную можно отдельно сделать функцию которая будет давать только информацию об этой переменной, но ни в коем случае не изменять.
К примеру:
class myPortfolio
{
public:
void getName() {
cout << name << endl;
}
private:
string name = "Anton";
};
class tryChangePortfolio
{
public:
void changeName {
myPortfolio portf;
portf.name = "Обнулил"; // Ошибка.
}
}
Тем самым можно получить информацию об name но изменить её никак нельзя.
Ты как бы полностью управляешь своим кодом.