2013-04-10 2 views
0

Почему не могут статические члены данных инициализироваться в списке инициализации конструктора, в то время как это может быть сделано в определении конструктора?Инициализация статических элементов C++ в списке инициализации

+1

Как вы предлагаете инициализировать элемент данных в теле конструктора? – chris

ответ

8

Вы ошибаетесь. Они могут быть инициализированы в одной единице перевода за пределами определения класса *, и они могут быть , назначенные в конструкторе.

Вы можете только инициализировать текущий элемент класса не static в списке инициализации конструктора.

* Исключения применяются

+0

Хороший ответ (+1). Поздравляем с 100k! – NPE

+0

О, эй, поздравляю! – chris

+0

эй, поздравляю! – billz

0

Статические члены находятся в области видимости класса т.е. они являются переменными класса не экземпляр variable.We инициализации экземпляров с помощью конструктора. Поскольку статическая переменная не для экземпляра, а для всего класса, статические переменные не инициализируются конструктором. Благодаря

0

Давайте попробуем это более конкретный

#include <iostream> 

using namespace std; 

class classWithStaticVariable 
{ 

    static int aStaticVariable; 

    int aNormalInstanceVariable; 
public: 
    classWithStaticVariable(int aParameter) 
    { 

     aNormalInstanceVariable=aParameter; 

     aStaticVariable=aNormalInstanceVariable;/////It is possible to assign value to static data member in constructor but not possible to init it. 

    } 

    void aTestFunctionJustToPrint() 
    { 


     cout<<aStaticVariable<<aNormalInstanceVariable; 
    } 



}; 
int classWithStaticVariable::aStaticVariable=1; 

int main() 
{ 

    classWithStaticVariable t(2); 

    t.aTestFunctionJustToPrint(); 


} 

Статическая переменная являются переменная класса не переменная экземпляра. Поэтому статическая переменная должна быть инициализирована с помощью определения класса. Снова конструктор используется для инициализации переменной экземпляра для объекта при его создании. Все это. Спасибо

Смежные вопросы