天天看點

如何初始化類的static成員變量?

如何初始化類的static成員變量?

類的static成員變量不被某一個對象所獨有,而是被所有同類型的對象所共有。

隻能在頭檔案中聲明類的static成員變量,不可在頭檔案中初始化,否則會造成重定義。必須在另外一個.cpp檔案中進行初始化。并且,初始化的時候不可以有static修飾詞。

frank@userver:~/project/test/static-test/static2_cpp$ cat static.h

#ifndef STATIC_H

#define STATIC_H

#include<iostream>

using std::cout;

using std::endl;

class TestType{

    static int m_static;

public:

    TestType(int dat = 0) {}

    void Show()const{

        cout << "this=" << this << ", ";

        cout << "m_static:(" << &m_static << ", " << m_static << ")\n";

    }

};

#endif // #ifndef STATIC_H

frank@userver:~/project/test/static-test/static2_cpp$ cat static.cpp 

#include "static.h"

int TestType::m_static = 15;

frank@userver:~/project/test/static-test/static2_cpp$ cat test.h 

#ifndef TEST_H

#define TEST_H

void test();

#endif // #ifndef TEST_H

frank@userver:~/project/test/static-test/static2_cpp$ cat test.cpp 

#include "test.h"

void test(){

    cout << __func__ << endl;

    TestType obj(5);

    obj.Show();

}

frank@userver:~/project/test/static-test/static2_cpp$ cat main.cpp 

int main(){

    TestType obj(4);

    test();

frank@userver:~/project/test/static-test/static2_cpp$ g++ main.cpp test.cpp static.cpp 

frank@userver:~/project/test/static-test/static2_cpp$ ./a.out 

main

this=0x7fff309db27f, m_static:(0x602078, 15)

test

this=0x7fff309db25f, m_static:(0x602078, 15)

frank@userver:~/project/test/static-test/static2_cpp$ 

      本文轉自FrankNie0101 51CTO部落格,原文連結:http://blog.51cto.com/frankniefaquan/1936705,如需轉載請自行聯系原作者

繼續閱讀