1
我對以下代碼有兩個問題。非參數化和複製構造函數
首先
是什麼CASE1 CASE2和區別?由於缺少非參數構造函數,我可以看到CASE2無法編譯。爲什麼CASE1編譯?
二
是什麼CASE3和CASE4之間的區別?爲什麼複製構造函數或賦值運算符被調用?據this教程實例化一個對象,並從 用值初始化它的另一個對象
這是在這種情況下究竟會發生什麼,當拷貝構造函數被調用
。請注意,
CComplexNumber e = c;
在概念上與CASE3相同,但這裏調用了複製構造函數。
#include <iostream> using namespace std; class CComplexNumber { float m_realPart; float m_imagPart; public: CComplexNumber(float real, float imaginary) : m_realPart(real), m_imagPart(imaginary) { cout<<"Constructor called"<<endl; } CComplexNumber(const CComplexNumber & copy) { cout<<"Copy constructor called"<<endl; this->m_realPart=copy.m_realPart; this->m_imagPart=copy.m_imagPart; } CComplexNumber& operator=(const CComplexNumber& rhs){ cout<<"Assignment operator called"<<endl; this->m_realPart=rhs.m_realPart; this->m_imagPart=rhs.m_imagPart; return *this; } friend ostream& operator<<(ostream& out,const CComplexNumber& rhs){ out<<"["<<rhs.m_realPart<<","<<rhs.m_imagPart<<"]"; return out; } }; int main() { CComplexNumber a(); //CASE1 //CComplexNumber b; //CASE2 CComplexNumber c=CComplexNumber(3,4); //CASE3 CComplexNumber d(CComplexNumber(5,6));//CASE4 cout<<a<<"|"<<c<<"|"<<d<<"|"<<endl; return 0; }
輸出
Constructor called Constructor called 1|[3,4]|[5,6]|
我相信CASE2不會編譯,因爲默認構造函數尚未實現,並且由於其他構造函數而未隱式生成。 – maditya
@maditya:是的,但我認爲OP知道這一點。非參數構造函數是他說默認構造函數的奇特方式。 –
爲什麼「cout << a」行打印出「1」? – Slazer