NumberArray first(3,10.5);
NumberArray second(5, 20.5);
first = second;
如果要將第一個物件 first 設定為與第二個物件 second 完全相同的值,此時,C++ 將再次執行按成員複製,從第二個物件複製成員到第一個物件中,這將導致兩個物件中的指標指向同一記憶體。NumberArray second = first; //複製建構函式被呼叫
該語句建立 second 物件,並使用 first 的值初始化它,這是一個初始化語句,它導致複製建構函式被呼叫來執行初始化。但是,以下語句則不一樣:second = first; //複製建構函式未被呼叫
該語句假定兩個物件都是以前建立的,它僅僅是一個賦值語句,因此不會呼叫建構函式。operator=
的運算子函數作為該類的成員函數。例如,要為 NumberArray 類執行此操作,則可以按如下所示編寫該類的宣告:class NumberArray { private: double *aPtr; int arraySize; public: void operator = (const NumberArray & right) ;//過載運算子 NumberArray(const NumberArray &); NumberArray(int size, double value); ~NumberArray() { if (arraySize > 0) delete [ ] aPtr; } void print() const; void setValue(double value); };現在先來看一看函數頭或原型,然後再看一看運算子函數本身是如何實現的。函數頭的各個主要部分可以分解如下,如圖 1 所示。