Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Статические методы и переменные 
V
    Опции темы
flagist0
Дата 30.11.2007, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 29.10.2007

Репутация: нет
Всего: нет



Подскажите плиз, где в сети можно почитать про статические члены класса и переменные. У Страуструпа и Шилдта про это вскользь сказано, а хочется понять, например, почему память под статик-переменные надо выделять самому.  
PM MAIL GTalk   Вверх
JackYF
Дата 30.11.2007, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(flagist0 @  30.11.2007,  18:51 Найти цитируемый пост)
почему память под статик-переменные надо выделять самому.   

ух-ты, класс, а откуда ты это вычитал? первый раз слышу и никогда не выделял.

З.Ы. почитай Дейтелов


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Alek86
Дата 30.11.2007, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



может, инициализировать?
тогда, вроде, компилятор адрес назначает


--------------------
user posted image    user posted image
PM MAIL   Вверх
archimed7592
Дата 30.11.2007, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



flagist0, в случае со статическими членами - там не память выделять нужно, а сам член определять(как и любую другую сущность в языке, иначе будет "unresolved external reference").

В случае со статическими переменными - такие же переменные, как и обыкновенные(автоматические), только время жизни у них другое и гипотетически, место расположения в памяти другое.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
flagist0
Дата 30.11.2007, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 29.10.2007

Репутация: нет
Всего: нет



Спасибо-спасибо!
Да уж, криво выразился - я имел в виду, что есть у меня в классе статическая переменная:
Код

class FSChangeMon{
private:
static bool fschm_lock;
};

Далее, по совету intuit.ru 
Цитата

Для выделения памяти под эту переменную ее повторно следует объявить в модуле компиляции, в котором она будет использоваться, квалифицируя имя статической переменной именем класса.

Например: bool FSChangeMon::fschm_lock=0; 

Так вот, зачем ее надо определять в срр-файле? Ведь компилятор прошелся по определению класса, и имхо при создании его первого экземпляра может выделить под нее память (а не в стеке, так?) автоматически? Или это все из-за невозможности ее инициализировать в описания класса?


Это сообщение отредактировал(а) flagist0 - 30.11.2007, 19:38
PM MAIL GTalk   Вверх
JackYF
Дата 30.11.2007, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(flagist0 @  30.11.2007,  19:34 Найти цитируемый пост)
FSChangeMon

это зачем здесь? указатель на функцию у тебя что, член класса?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
flagist0
Дата 30.11.2007, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 29.10.2007

Репутация: нет
Всего: нет



JackYF:
Да, это член класса. Спасибо, уже разобрался, из ответа убрал.
PM MAIL GTalk   Вверх
archimed7592
Дата 30.11.2007, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



flagist0, ну, во-первых, ИНТУИТ славится своими недо-учебниками smile.

Смотри: есть объявление и есть определение.

Объявления:
Код

class A; // класс
int func(char, char); // ф-ция
extern double k;  // статическая переменная.

class A // ОПРЕДЕЛЕНИЕ класса A
{
    A(); // конструктор
    void doSmth() const; // метод
    static int counter; // статический член
};

Всё перечисленное выше - объявления(кроме определения самого класса A).
Теперь определения всего этого:
Код

int func(char, char) // ф-ция
{
    // ...
}

double k; // статическая переменная.

A::A() // конструктор
{
    // ...
}

void A::doSmth() const // метод
{
    // ...
}

int A::counter; // статический член


Почему-то ты не удивляешься, что не нужно определять ф-ции, классы, их методы и т.д., но удивляешься, что нужно определять статические члены smile.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
MAKCim
Дата 30.11.2007, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата(archimed7592 @  30.11.2007,  19:14 Найти цитируемый пост)
и гипотетически, место расположения в памяти другое. 

сегмент данных или BSS


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
flagist0
Дата 30.11.2007, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 29.10.2007

Репутация: нет
Всего: нет



Спасибо за ответы! Особенно за микропинок насчет объявления и определения функции - это все объяснило smile
SOLVED
PM MAIL GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




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


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.