12-成員變數的初始化

東閣堂主發表於2019-02-15

寫在前面

成員變數-不好解釋,大家都懂就是成員變數
struct Person {
    int age;
};
age 就是成員變數
複製程式碼

名詞解釋

建構函式(也叫構造器),在物件建立的時候自動呼叫,一般用於完成物件的初始化工作
複製程式碼

碼上建功

struct Person {
    int m_age;
};
// 全域性區(成員變數初始化為0)
Person g_person;

int main() {
    // 棧空間(成員變數沒有初始化)
    Person person;
    // 堆空間
    Person *p1 = new Person; // 成員變數沒有初始化
    Person *p2 = new Person(); // 成員變數有初始化
    
    cout << "g_person " << g_person.m_age << endl;
    cout << "p1 " << p1->m_age << endl;
    cout << "p2 " << p2->m_age << endl;
}
看下列印結果
g_person 0
p1 0
p2 0
可以看出,成員的初始化後 m_age預設為0

"看下有建構函式的成員初始化情況"
struct Person {
    int m_age;
    Person() {
     this->m_age = 3;
    }
};

// 全域性區(成員變數初始化為0)
Person g_person;

int main() {
    // 棧空間(成員變數沒有初始化)
    Person person;
    // 堆空間
    Person *p1 = new Person; // 成員變數沒有初始化
    Person *p2 = new Person(); // 成員變數有初始化
    
    cout << "g_person " << g_person.m_age << endl;
    cout << "p1 " << p1->m_age << endl;
    cout << "p2 " << p2->m_age << endl;
}
列印結果:
g_person 3
p1 3
p2 3
可以看出,成員的初始化後 m_age預設為設定的值
複製程式碼

裝逼一下

如果自定義了建構函式,除了全域性區,
其他記憶體空間的成員變數預設都不會被初始化,需要開發人員手動初始化
複製程式碼

完整程式碼demo,請移步GitHub:DDGLearningCpp

當然C++大神就繞吧,非喜勿噴,畢竟這是個人的學習筆記?

相關文章