Статическая переменная в классе(+)
От: Аноним  
Дата: 15.03.06 15:44
Оценка:
Здрасте.
Сначала код

class CBase{
public:
    static int a;
};

int CBase::a;

int _tmain(int argc, _TCHAR* argv[])
{
    CBase cb1;
    int a = cb1.a;
    cb1.a = 100;

    CBase cb2;
    int b = cb2.a;

    return 0;
}


Теперь вопрос. Почему статический член класса(int CBase::a надо объявлять отдельно? Иначе не слинкуется.
Не пойму. А что компилятору самому это трудно сделать? Из страуструповской писанины ничё не понял
Re: Статическая переменная в классе(+)
От: Alxndr Германия http://www.google.com/profiles/alexander.poluektov#buzz
Дата: 15.03.06 15:51
Оценка:
Здравствуйте, Аноним, Вы писали:

А>
А>class CBase{
А>public:
А>    static int a; // это - объявление статической переменной класса; пока что она нигде не определена
А>};

А>int CBase::a; // а это - ее определение
А>


А>Теперь вопрос. Почему статический член класса(int CBase::a надо объявлять отдельно? Иначе не слинкуется.

А>Не пойму. А что компилятору самому это трудно сделать?

Не объявлять, а определять.
А когда ты пишешь

extern int a;


, ты тоже рассчитываешь, что компилятор за тебя переменную объявит?
Коспилятору вообще наплевать, что она нигде не определена.

А>Из страуструповской писанины ничё не понял


Читай до полного просветления
Re: Статическая переменная в классе(+)
От: remark Россия http://www.1024cores.net/
Дата: 15.03.06 15:52
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здрасте.

А>Сначала код

А>
А>class CBase{
А>public:
А>    static int a;
А>};

А>int CBase::a;

А>int _tmain(int argc, _TCHAR* argv[])
А>{
А>    CBase cb1;
А>    int a = cb1.a;
А>    cb1.a = 100;

А>    CBase cb2;
А>    int b = cb2.a;

А>    return 0;
А>}
А>


А>Теперь вопрос. Почему статический член класса(int CBase::a надо объявлять отдельно? Иначе не слинкуется.

А>Не пойму. А что компилятору самому это трудно сделать? Из страуструповской писанины ничё не понял


Ну типа все переменные вообще надо определять

А если тебе надо написать

int CBase::a = 157;


Или ещё пуще:

SomeType globalObj;

SomeType2 CBase::a(157, globalObj);


Т.е. вызвать конструктор глобального объекта с каким-то параметрами. Как это компилятор сам сделает?



1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.