Вторник, 26 Ноября 2024, 15:56

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Public, Private, Protected - что и когда?
MorfayДата: Пятница, 27 Января 2012, 15:30 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Здравствуйте. При написании движка столкнулся с такой ситуацией, что не знаю, как распределить доступ к функциям и переменным. Я знаю различия между privat, public и protected, но в каких случаях лучше использовать protected или private не могу понять - в мануалах сказано, чтобы защитить данные или предотвратить ненужный вызов функции. Но в С++ до сих пор с подобным не сталкивался (или думаю, что не сталкивался). Объясните, пожалуйста, на примерах (желательно связанных с разработкой игр), когда нужно отнести переменные\функции в private или protected.
RorschachДата: Пятница, 27 Января 2012, 16:39 | Сообщение # 2
участник
Сейчас нет на сайте
Если есть класс который наследует от класса о котором идет речь и использует как-то эти функции, нужно сделать их защищенными, иначе приват.

Never compromise. Not even in the face of Armageddon.
MorfayДата: Пятница, 27 Января 2012, 18:31 | Сообщение # 3
почетный гость
Сейчас нет на сайте
Это не то, я понимаю как работает private и protected. Мне нужны конкретные примеры. Могу прикинуть только, то защита нужна для каких-либо констант класса, либо специальных переменных, которые изменяются при определенных условия в определенной функции (чтобы напрямую их изменить нельзя было). А что еще? Можно, пожалуйста конкретные примеры (допустим ваши), когда вы защищали переменные или функции?
noTformaTДата: Пятница, 27 Января 2012, 18:36 | Сообщение # 4
Ukrainian independent game developer
Сейчас нет на сайте
Исходники одного движка, не с++, но все-же.

@noTformaT
RorschachДата: Пятница, 27 Января 2012, 18:41 | Сообщение # 5
участник
Сейчас нет на сайте
Любой пример будет слишком исскуственным. Любые данные или методы, которые не используются за пределами данного класса следует сделать приватными. Если данные или методы используются в дочерних классах, их делают защищенными. Никаких других скрытых мотивов выбора между private и protected не существует.

Never compromise. Not even in the face of Armageddon.
MorfayДата: Пятница, 27 Января 2012, 19:33 | Сообщение # 6
почетный гость
Сейчас нет на сайте
Немного не понятно. Насколько я знаю, приватные переменные можно поменять только через метод класса, приватные методы нельзя вызвать напрямую (на то они и приватные). А протектед, можно использовать в дочерних классах, а в остальных случаях изменить нельзя. То есть, если методы/переменные используются только внутри класса, то их делаем приватными. Если класс родительский, но методы и переменные используются только внутри классов (родительского и дочернего), то протектед. А если используем методы/переменные внутри main или других классах то паблик. Я правильно понял?
DemeronДата: Пятница, 27 Января 2012, 19:40 | Сообщение # 7
User created in C++
Сейчас нет на сайте
public - можно использовать вне класса. можно использовать при наследовании.
private - нельзя использовать вне класса. нельзя обращаться при наследовании.
protected - нельзя использовать вне класса. можно использовать при наследовании.
RorschachДата: Пятница, 27 Января 2012, 20:14 | Сообщение # 8
участник
Сейчас нет на сайте
Quote
Я правильно понял?

Да.

Добавлено (27.01.2012, 20:14)
---------------------------------------------

Quote
Я правильно понял?

Да.


Never compromise. Not even in the face of Armageddon.
MatouДата: Пятница, 27 Января 2012, 20:32 | Сообщение # 9
Исходный коТ
Сейчас нет на сайте
Morfay, ниразу не видел каких-то рекомендаций и примеров когда надо использовать public когда private и когда protected. Видимо потому что это элементарные вещи понятные на интуитивном уровне. Почитав твои посты сложилось впечатление что ты не понимаешь зачем вообще нужно скрывать некоторые переменные и методы класса, посему советую изучить такой вопрос как инкапсуляция.


MorfayДата: Пятница, 27 Января 2012, 21:33 | Сообщение # 10
почетный гость
Сейчас нет на сайте
Вроде понял, всем спасибо. Про инкапсуляцию перечитаю еще раз, может чего не заметил. Честно говоря, вопрос возник после того, когда заметил, что у меня в классах все в public, и это мне никак не мешало. Вот и захотелось просветить себя в каких случаях лучше будт защитить методы и переменные.

Тему можно закрывать. Еще раз всем спасибо.
ComentДата: Суббота, 28 Января 2012, 19:05 | Сообщение # 11
почетный гость
Сейчас нет на сайте
Пожалуй добавлю немного слов smile

У нас есть пуль от телевизора - пользователь может переключать каналы, менять уровень громкости итд. Но вот как меняется громкость ему знать не обязательно. Я к чему. Абстракция одна из составляющих ООП. Для начала создайте абстрактную модель вашей идеи и тогда сами поймете что скрывать,а что нет smile
ExoloN32Дата: Пятница, 17 Февраля 2012, 22:51 | Сообщение # 12
был не раз
Сейчас нет на сайте
Я скажу проще. Рассматривай класс в первую очередь как тип данных, которые как правило либо privat, либо protected. А Функции это приложение к данным.
Они обычно public. Примерно от сюда и пляши.
Тем более, что функции хранятся в стеке, а экземпляр класса состоит только из данных.

Добавлено (17.02.2012, 22:51)
---------------------------------------------
Доступ к данным осуществляется через функции. Например... void SetData(int Value); int GetData();


Сообщение отредактировал ExoloN32 - Пятница, 17 Февраля 2012, 22:53
StageДата: Суббота, 18 Февраля 2012, 00:52 | Сообщение # 13
постоянный участник
Сейчас нет на сайте
Quote
Рассматривай класс в первую очередь как тип данных, которые как правило либо privat, либо protected. А Функции это приложение к данным.
Они обычно public. Примерно от сюда и пляши.

Самое отвратительное объяснение инкапсуляции ever.
ExoloN32Дата: Суббота, 18 Февраля 2012, 22:58 | Сообщение # 14
был не раз
Сейчас нет на сайте
Думаю, что для новичка в самый раз. Можно объяснять долго и нудно, но всё это он уже где-то читал.

Добавлено (18.02.2012, 22:58)
---------------------------------------------
protected делаешь тогда, когда нужно, чтобы был доступ к этим данным в классе наследнике. Иначе privat.

  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг