1. 程式人生 > >物件的幾種初始化方式

物件的幾種初始化方式

1 常用的幾種物件初始化方式

定義如下的類Test:

class Test
{
public:
    Test()
    {
        cout << "Test()" << endl;
    }

    Test(int v)
    {
        cout << "Test( " << v << " )" << endl;
    }

    Test(const Test& obj)
    {
        cout << "const Test& obj" <<
endl; } void operator =(const Test& obj) { cout << "void operator =(const Test& obj)" << endl; } };

可以使用如下幾種初始化方式:

    Test t1;            // 呼叫Test()
    Test t2(1);         // 呼叫Test(int v)
    Test t3 = 2;        // 呼叫Test(int v)
    Test t4 = Test(3);  // 呼叫Test(int v)
Test t5 = t3; // 呼叫Test(const Test& obj)

第一種和第二種比較容易理解。
第三種就和我們初始化內建資料型別的變數一樣,比如:int i = 999;
第四種採用了直接呼叫建構函式的方法,由於編譯器的優化這裡並不會產生臨時物件,而是直接呼叫了有參的建構函式。
第五種由於是使用另一個物件對當前物件進行初始化,所以會呼叫拷貝建構函式。

2 如何手動的呼叫建構函式

上面提到的第四種物件初始化的方式也就是手動的呼叫了建構函式。有時我們需要手動的呼叫建構函式,比如:建立物件陣列的時候。

Test類如下:

class Test
{
private:
int m_value; public: Test() { m_value = 0; } Test(int v) { m_value = v; } int getValue() { return m_value; } };

可以採取如下的方式建立物件陣列:

Test test_array[3];

如果採取上面建立物件陣列的方式,物件陣列中的每一個物件都將會呼叫無參的建構函式。如果我們想要每一個物件的成員變數的初始值都按照我們的需要來進行設定,那麼可以採取手動呼叫建構函式的方式:

Test test_array[3] = {Test(), Test(1), Test(2)};