C++(十三)對象數組與構造函數

一、一般對象數組初始化

對象數組中的元素同樣需要用構造函數初始化。具體哪些元素用哪些構造函數初始化,取決於定義數組時的寫法。

#include<iostream>
using namespace std;
class CSample{
public:
    CSample(){        //構造函數 1
        cout<<"Constructor 1 Called"<<endl;
    }
    CSample(int n){   //構造函數 2
        cout<<"Constructor 2 Called"<<endl;
    }
}
int main(){
    CSample arrayl[2];        // array1 數組中的兩個元素沒有初始化,調用無參構造函數初始化,
    cout<<"stepl"<<endl;
    CSample array2[2] = {3};   //array2 數組中array3[0]初始化了,array3[1] 無初始化,故分別用構造函數 2 和構造函數 1 進行初始化。
    cout<<"step2"<<endl;
    CSample* array3 = new CSample[2];  //動態分配了一個 CSample 數組,這兩個元素無參,都用無參構造函數初始化
    delete [] array3;
    return 0;
}
============輸出結果=============
Constructor 1 Called
Constructor 1 Called
stepl

Constructor 2 Called
Constructor 1 Called
step2

Constructor 1 Called
Constructor 1 Called

二、多參數對象數組初始化

在構造函數有多個參數時,數組的初始化列表中要顯式包含對構造函數的調用

class CTest{
public:
    CTest(int n){ }          //構造函數(1)
    CTest(int n, int m){ }   //構造函數(2)
    CTest(){ }               //構造函數(3)
};
int main()
{
    CTest arrayl [3] = { 1, CTest (1, 2) };    //三個元素分別用構造函數(1)、(2)、(3) 初始化
    CTest* pArray[3] = { new CTest(4) , new CTest(1,2) }; //兩個元素指向的對象分別用構造函數(1)、(2)初始化
    return 0;
}

pArray 數組是一個指針數組,其元素不是CTest 類的對象,而是 CTest 類的指針。對 pArray[0] 和 pArray[1] 進行了初始化,把它們初始化爲指向動態分配的 CTest 對象的指針,而這兩個動態分配出來的 CTest 對象又分別是用構造函數(1)和構造函數(2)初始化的。
pArray[2] 沒有初始化,其值是隨機的,不知道指向哪裏。故只生成了兩個 CTest 對象,而不是三個,所以也只調用了兩次 CTest 類的構造函數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章