Задать вопрос
@TopToster

В чем разница между методом в public и private?

В чем разница между методом,который находится в классе в public и тем, что в private?
  • Вопрос задан
  • 2765 просмотров
Подписаться 1 Простой 3 комментария
Решения вопроса 2
@Mercury13
Программист на «си с крестами» и не только
Это права доступа к методу. Относятся не к Cи++, а к ООП в целом.

private — имеют доступ только методы самого объекта.
protected — имеют доступ методы объекта и его потомков.
public — кто угодно.

Также существуют права доступа типа «не важно, что объекты станут связанным клубком; я готов к тому, что этот клубок придётся добавлять в программу целиком». В общем, когда объекты имеют доступ к private-методам друг друга.
• В Си++ — ключевое слово friend
• В Java — без ключевого слова (т.н. права доступа package)
• В Паскале — по умолчанию есть доступ к private-полям и методам всех объектов в том же модуле.

Эти особые права доступа (friend/package) оправданы, когда…
• Издержки от клубка незначительны (например, объекты невелики и хорошо взаимосвязаны).
• В клубок входят объект и его утилиты (например, какая-нибудь операция ++).
Ответ написан
Комментировать
@SaddledSharp
Кодер. Увлекаюсь информационной безопасностью.
Своими словами:
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 но изменить её никак нельзя.
Ты как бы полностью управляешь своим кодом.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@66demon666
Сетевой админ, АТС-админ
Этот вопрос относится не только к СИ, а к ООП в принципе. public - метод можно вызвать в экземпляре класса, private - метод можно вызвать только внутри класса, а вообще есть Вот такой сайт
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы