Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > C++

Ответ
 
Опции темы
Старый 24.08.2012, 00:23   #1
Okay
Знающий
 
Регистрация: 21.11.2011
Сообщений: 284
Написано 17 полезных сообщений
(для 74 пользователей)
public static и т.д.

Привет всем.
Недавно начала изучать c++ и не понял что такое public, static и т.д.
Вообще для чего они и что выполняют?
(Offline)
 
Ответить с цитированием
Старый 24.08.2012, 00:51   #2
jimon
 
Сообщений: n/a
Ответ: public static и т.д.

public, protected, private - определяют область доступности полей и методов класса

class A 
{
public:
	int x;
protected:
	int y;
private:
	int z;
};

void foo()
{
	A bar;
	int x = bar.x; // можно получить
	int y = bar.y; // нельзя получить
	int z = bar.z; // нельзя получить
}

class B : public A
{
	// x становится public
	// y становится protected
	// z становится не доступным из B
};

class C : protected A
{
    // x становится protected
    // y становится protected
    // z становится не доступным из C
};

class D : private A
{
    // x становится private
    // y становится private
    // z становится не доступным из D
};

class E : private A
{
    // x не доступен из E
    // y не доступен из E
    // z не доступен из E
};
static в зависимости от места использования или делает поле общим для всех объектов, или организовывает возможность существования переменной когда она выходит из поле видимости или интересные вещи с функциями
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Okay (24.08.2012)
Старый 24.08.2012, 00:59   #3
Okay
Знающий
 
Регистрация: 21.11.2011
Сообщений: 284
Написано 17 полезных сообщений
(для 74 пользователей)
Ответ: public static и т.д.

Спасибо, взял что-то в голову.
Но не пойму чем помешает всегда иметь public?
(Offline)
 
Ответить с цитированием
Старый 24.08.2012, 01:17   #4
Gector
Легенда
 
Аватар для Gector
 
Регистрация: 14.10.2007
Сообщений: 3,878
Написано 2,012 полезных сообщений
(для 5,072 пользователей)
Ответ: public static и т.д.

Сообщение от Okay Посмотреть сообщение
Спасибо, взял что-то в голову.
Но не пойму чем помешает всегда иметь public?
Доступ быстрее.
(Offline)
 
Ответить с цитированием
Старый 24.08.2012, 01:23   #5
jimon
 
Сообщений: n/a
Ответ: public static и т.д.

Сообщение от Okay Посмотреть сообщение
Спасибо, взял что-то в голову.
Но не пойму чем помешает всегда иметь public?
инкапсуляция - идея в том что объект это черный ящик и детали реализации скрыты от пользователя, вот для неё protected и private нужен

ps. в struct по умолчанию public
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Gector (24.08.2012)
Старый 24.08.2012, 01:43   #6
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: public static и т.д.

Но не пойму чем помешает всегда иметь public?
имей.
больше всего бесило когда тебе надо быстро успеть что-то переделать в проге, но для этого внезапно требуется доступ к данным, которые были в давние-давние времена в давних-давних классах, от которых всё зависит, помечены как private/protected, в результате приходилось тупо ждать рекомпила минутами.
нафиг эти игры в чёрные ящики и сокрытие чего-то от самого себя, слава struct.
да и куда детали реализации скрыты, если они все равно указаны в хидере и все равно будут выскакивать через intellisense? в каком-нибудь вижуал ассисте можно вроде настроить чтоб не выскакивали, но за такие игры с самим собой при участии платных тулз можно вообще премию почётного кретина выдать.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
DarkMedveD (13.10.2012)
Старый 24.08.2012, 02:05   #7
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: public static и т.д.

лучше пару минут подождать рекомпил, чем выискивать неделями баги из-за недостаточной инкапсуляции.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
falcon (26.08.2012)
Старый 24.08.2012, 02:20   #8
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: public static и т.д.

баги из-за недостаточной инкапсуляции
пример?
(Offline)
 
Ответить с цитированием
Старый 24.08.2012, 02:37   #9
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: public static и т.д.

пример?
в личной жизни не сталкивался, ибо у меня как провило все переинкапсулированно.
(Offline)
 
Ответить с цитированием
Старый 24.08.2012, 08:02   #10
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: public static и т.д.

Сообщение от Mr_F_ Посмотреть сообщение
имей.
больше всего бесило когда тебе надо быстро успеть что-то переделать в проге, но для этого внезапно требуется доступ к данным, которые были в давние-давние времена в давних-давних классах, от которых всё зависит, помечены как private/protected, в результате приходилось тупо ждать рекомпила минутами.
Как же хорошо что в C# есть internal, причем можно дать доступ к интерналам для другой сборки
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 24.08.2012, 11:18   #11
Mhyhr
Бывалый
 
Регистрация: 06.04.2009
Сообщений: 612
Написано 276 полезных сообщений
(для 858 пользователей)
Ответ: public static и т.д.

Сообщение от pax Посмотреть сообщение

Как же хорошо что в C# есть internal, причем можно дать доступ к интерналам для другой сборки
Эм.. Похоже на аналог friend в с++
(Offline)
 
Ответить с цитированием
Старый 24.08.2012, 11:44   #12
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: public static и т.д.

В С++ friend вроде только для своих классов, а в Net можно определять дружественные сборки. Т.е. доступ к internal типам/членам одной dll из другой.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо pax за это полезное сообщение:
Mhyhr (24.08.2012), Mr_F_ (24.08.2012)
Старый 26.08.2012, 04:42   #13
falcon
Разработчик
 
Аватар для falcon
 
Регистрация: 12.07.2008
Сообщений: 523
Написано 196 полезных сообщений
(для 470 пользователей)
Ответ: public static и т.д.

Mr_F_ у меня на работе весь проект по **зде пошёл, из-за подобных мыслей)
если состояние объекта (данные) необходимо менять\получать в каком-то левом модуле - вероятнее всего ты что-то делаешь не так.

у нас, как следствие использования public везде, невозможно вычислить какого хрена где и почему какой-то баран, в своё время, решил поменять состояние объекта. В итоге выплывает куча багов, которые хрен отследишь. Система ТАК завязана на внутренней реализации каждого отдельного объекта, что уследить происходящее с каждым из них в любой момент времени - невероятный ад. А уж попытаться использовать функционал повторно или пытаться его расширить - мысли граничащие с фантастикой.
Так что не стоит пренебрегать инкапсуляцией.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Mr_F_ (26.08.2012)
Старый 26.08.2012, 13:23   #14
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: public static и т.д.

Согласен, что это может быть необходимо, если над проектом работает больше одного человека. Если пишешь чисто сам - тогда не думаю.
Ну и я в принципе не хочу писать тру ООП код, так что не собираюсь плодить и великие множества классов.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 01:59.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com