前面提到過,派生類的預設複製建構函式會呼叫基礎類別的複製建構函式,以對派生類物件中的基礎類別物件進行初始化。
如果基礎類別過載了賦值運算子
=
而派生類沒有,那麼在派生類物件之間賦值,或用派生類物件對基礎類別物件進行賦值時,其中基礎類別部分的賦值操作是呼叫被基礎類別過載的
=
完成的。例如下面的程式:
#include <iostream>
using namespace std;
class CBase
{
public:
CBase() {}
CBase(CBase & c) { cout << "CBase::copy constructor called" << endl; }
CBase & operator = (const CBase & b)
{
cout << "CBase::opeartor = called" << endl;
return *this;
}
};
class CDerived : public CBase {};
int main()
{
CDerived d1, d2;
CDerived d3(d1); //d3初始化過程中會呼叫CBase類的複製建構函式
d2 = d1; //會呼叫CBase類過載的“=”運算子
return 0;
}
程式的輸出結果是:
CBase::copy constructor called
CBase::opeartor = called