為什么這里要使用初始化列表Watch(Time &t):m_tTime(t){},不能使用賦值運算Watch(Time &t){m_tTime = t;}?
class Watch
{
public:
Watch(Time &t){m_tTime = t;}
void display()
{
cout << m_tTime.m_iHour << endl;
cout << m_tTime.m_iMinute << endl;
cout << m_tTime.m_iSecond << endl;
}
public:
Time m_tTime;
};
2020-02-17
因為Time類沒有默認構造函數 初始化列表先于構造函數執行 所以這里只有用初始化列表? 如果你要用賦值運算符的話 只有在Time類中設置默認構造函數
2020-03-17
因為編譯器總是確保所有成員對象在構造函數體執行之前初始化,所以類類型的數據成員對象,在進入構造函數體之前就已經完成了構造。所以這里的m_tTime成員對象會在初始化列表(此處為空)執行完前進行實例化,所以會調用Time類的默認構造函數,而你Time類中又沒有默認構造函數,所以報錯。