2013-06-20 129 views
2

下面的程序如何評估以下內容? 1.參數化構造函數是如何評估的?左到右 ?C++參數構造函數的求值

ZA(int n)0 --->調用基類構造函數。

ZA(int n)2 - > m_i = 2在這裏如何?

ZA(INT n)的0 ---->構造用於ZB定義ZA成員變量稱爲

ZA(INT n)的0

ZB(INT N)2

#include <iostream> 
using namespace std; 

class ZA 
{ 
public: 
    ZA(int n = 0) : m_i(n) 
    { 
     std::cout <<"ZA (int n)" <<m_i<<endl; 
     ++m_i; 
    } 
protected: 
    int m_i; 
}; 

class ZB : public ZA 
{ 
public: 
    ZB(int n = 5) : m_a(new ZA[2]), m_x(++m_i) 
    { 
     std::cout <<"ZB (int n)" <<m_i<<endl; 
    } 
    ~ZB() 
    { 
     delete [] m_a; 
    } 
private: 
    ZA m_x; 
    ZA *m_a; 
}; 

int main(void) 
{ 
    ZB b; 
    std::cout << std::endl; 
} 

回答

1

這裏是發生了什麼:

  • ZB(0)叫,但不運行

    • m_x(++m_i)被評估:=> 「ZA(INT n)的0」 和m_i = 1

    • 初始化處理在字段的順序聲明

    • 基構造ZA(0)被稱爲++ 1 = 2 =>「ZA(int n)2」and m_i = 2

    • m_a(new ZA[2])被評估,並創建兩個ZA實例=> 「ZA(INT n)的0」 兩次

  • 最後ZB構造運行=>「ZB(INT N)2

+0

爲什麼當」**「裏面有一個」_「時,星星出現了? :( – Pragmateek

+0

嘗試把代碼字面值反引號引用,'like_this',然後*'it_works' *。 – Yakk

+0

@Yakk:謝謝你的信息,我編輯了我的答案,用代碼高亮更好。 – Pragmateek