Ярославль


Страницы: (2) [1] 2   ( Перейти к первому непрочитанному сообщению ) Ответ в темуСоздание новой темыСоздание опроса

Спецификаторы C++

Алан Керманец
Дата 23.10.2007 - 05:30
Цитировать сообщение




Unregistered












Чем отличается определение функции - компонента класса со спецификатором static от определения со спецификатором friend?
Top
NuINu
Дата 23.10.2007 - 08:34
Цитировать сообщение




Чатланин
**

Профиль
Группа: Пользователи
Сообщений: 76
Пользователь №: 24325
Регистрация: 24.09.2007 - 14:43





а в документации что пишут на эту тему? или это вопрос что то типа КВНа?
PMПисьмо на e-mail пользователю
Top
Одиночка
Дата 23.10.2007 - 08:37
Цитировать сообщение




хихикающий байкер...
*****

Профиль
Группа: Пользователи
Сообщений: 2960
Пользователь №: 11055
Регистрация: 2.10.2006 - 13:31





я си знаю плоха но помоему второе ето "наследование"...
PMПисьмо на e-mail пользователю
Top
ASudakov
Дата 23.10.2007 - 09:10
Цитировать сообщение




Unregistered












я бы поставил вопрос по-другому - а что между этими спецификаторами общего???
Цитата
A friend function is a function that is not a member of a class but has access to the class's private and protected members.

Цитата
In C++, when modifying a data member in a class declaration, the static keyword specifies that one copy of the member is shared by all the instances of the class.
When modifying a member function in a class declaration, the static keyword specifies that the function accesses only static members.
Top
PadoNaK
Дата 23.10.2007 - 10:08
Цитировать сообщение




я кусаюсь
*****

Профиль
Группа: Пользователи
Сообщений: 1989
Пользователь №: 8348
Регистрация: 31.05.2006 - 09:11





ппц....

Алан Керманец
книжки то читать не модно?
PMПисьмо на e-mail пользователю
Top
NuINu
Дата 23.10.2007 - 10:44
Цитировать сообщение




Чатланин
**

Профиль
Группа: Пользователи
Сообщений: 76
Пользователь №: 24325
Регистрация: 24.09.2007 - 14:43





ASudakov
по прочтении выдежек, любезно предоставленных вами, я сделал вывод, общего между ними то.... что они являются спецификаторами. biggrin.gif biggrin.gif laugh.gif
PMПисьмо на e-mail пользователю
Top
Алан Керманец
Дата 23.10.2007 - 11:09
Цитировать сообщение




Unregistered












NuINu Общего между ними то, что они регулируют доступ к членам класса. Со спецификатором friend всё понятно, однако static был и остаётся весьма туманным.

PadoNaK Почему вместо того, чтобы нормально ответить и понятно объяснить на примере, Вы строите из себя капризного гуру? Не знаете, так и скажите. Или же Вы, следуя новейшим веяниям, используете форум заместо чата? Что касается литературы, то во всех имеющихся у меня книгах касательно спецификатора static написано примерно то же самое, что процитировал уважаемый ASudakov. Но ничерта не ясно.

Может ли кто-нибудь на примере пояснить необходимость применения спецификатора static к членам класса? Заранее благодарю.
Top
anka1010
Дата 23.10.2007 - 11:56
Цитировать сообщение




Бонифаций
*******

Профиль
Группа: Пользователи
Сообщений: 11296
Пользователь №: 9789
Регистрация: 13.08.2006 - 13:17





Иногда нужно определить элемент класса так, чтобы было возможно использовать его независимо от объекта этого класса.
К элементам класса обычно обращаются через объект этого класса, а если элемент класса (функцию или переменную) определить как static, то к нему (элементу) можно обращаться до того, как создан объект класса. (с) неточная цитата из книшки по Яве smile.gif
Например, в Яве статичной является функция main. Потомушто она вызывается до создания какого бы то ни было объекта.
PM
Top
PadoNaK
Дата 23.10.2007 - 11:58
Цитировать сообщение




я кусаюсь
*****

Профиль
Группа: Пользователи
Сообщений: 1989
Пользователь №: 8348
Регистрация: 31.05.2006 - 09:11





Алан Керманец
на примере не могу...не занимался...не знаю...

Спецификатор класса памяти static

Спецификатор класса памяти static может использоваться
в объявлениях функций и переменных с контекстом файла и ло-
кальным контекстом для обозначения внутреннего типакомпонов-
ки. Static также указывает, что переменная должна иметьста-
тическую продолжительность существования. При отсутствии
конструкторовили явныхинициализаторов статические переменные
инициализируются 0 или null.

В С++ компоненты класса,статические данные, имеет то же
значение длявсех вхождений класса. Члены класса, статические
функции, не зависят от других вхождений класса.




PMПисьмо на e-mail пользователю
Top
ASudakov
Дата 23.10.2007 - 12:47
Цитировать сообщение




Unregistered












Алан Керманец
Цитата
Может ли кто-нибудь на примере пояснить необходимость применения спецификатора static к членам класса? Заранее благодарю.

члены класса - это переменные и функции.

static применительно к переменным позволяет разделить одну переменную между всеми экземплярами данного класса. например, пользуясь такой переменной, можно реализовать примитивную синхронизацию между ними (хотя это только иллюстративный метод) или подсчитать количество живущих экземпляров (инкрементом в конструкторе, декрементом в деструкторе).

static относительно функций означает, что эта функция имеет доступ только к вышеупомянутым статическим переменным класса. навскидку - это скорее для дисциплины программирования сделано :) мне по крайней мере смысл туманен..

да, как и в Яве, статическую переменную можно использовать до создания экземпляров класса.

http://www.intuit.ru/department/pl/plintro/12/
Top
Алан Керманец
Дата 23.10.2007 - 12:54
Цитировать сообщение




Unregistered












ASudakov То есть, в некотором смысле, static-члены являются глобальными среди всех экземпляров данного класса? Отлично, просто и понятно. Огромное спасибо :=)
Top
ASudakov
Дата 23.10.2007 - 12:58
Цитировать сообщение




Unregistered












да, кроме того, дальнейшее чтение показало, что статик-функции также могут быть вызваны без создания экземпляров!

http://www.programmersclub.ru/25

как-то у меня в документации это слабо отражено..
Top
Weber
Дата 23.10.2007 - 13:03
Цитировать сообщение




Hijo de la Luna
*******

Профиль
Группа: Пользователи
Сообщений: 10257
Пользователь №: 2365
Регистрация: 4.11.2004 - 17:25





Алан Керманец
Цитата
Чем отличается определение функции - компонента класса со спецификатором static от определения со спецификатором friend?


Ничего общего у них нет. (!)

static-поле (как функция, так и переменная) одно на все объекты данного класса, т.е. фунция объявленная как static не имеет ссылку на this, её в принципе нет. По сути некое подобие глобальной функции или переменной (с нюансами разумеется).

friend связан с доступом в private-часть класса, если функция или класс объявлены внутри класса как friend, то они к классу не относятся - просто какие-то внешние, однако friend позволяет получить им доступ к закрытой части класса.

А вообще, учим С++ и вопросов тогда не будет.
PMПисьмо на e-mail пользователю
Top
Алан Керманец
Дата 23.10.2007 - 14:10
Цитировать сообщение




Unregistered












Всё, я понял. Всем спасибо за помощь :=)
Top
Weber
Дата 23.10.2007 - 18:03
Цитировать сообщение




Hijo de la Luna
*******

Профиль
Группа: Пользователи
Сообщений: 10257
Пользователь №: 2365
Регистрация: 4.11.2004 - 17:25





Пожалуйста! smile.gif
PMПисьмо на e-mail пользователю
Top

Опции темы Страницы: (2) [1] 2  Ответ в темуСоздание новой темыСоздание опроса

 



[ Время генерации скрипта: 0.0111 ]   [ Использовано запросов: 15 ]   [ GZIP включён ]



Яндекс.Метрика

Правила Ярпортала (включая политику обработки персональных данных)

Все вопросы: yaroslavl@bk.ru