很久沒有用C++了,今天看到一道關於賦值與拷貝的面試題,准備寫幾句代碼驗證下。
首先,講下驗證過後的結論:
1)顯示調用拷貝構造函數,肯定會執行拷貝構造函數。如Cat c2(c1);
2)在初使化時進行賦值,也會執行拷貝構造函數,如Cat c2=c1;
3)其它時間進行賦值,執行operator=的實現函數。如Cat c1,c2; c1=c2;
代碼如下所示:
[cpp]
#include <iostream>
using namespace std;
class Cat{
public:
char name[20];
public:
Cat(){}
Cat(char * s){
if(s!=NULL)
strcpy(name,s);
cout<<"use constructor"<<endl;
}
Cat(const Cat & cat)
{
if(cat.name!=NULL)
strcpy(name,cat.name);
cout<<"use copy constrctor"<<endl;
}
Cat & operator=(Cat& cat)
{
if(this == &cat)
return *this;
strcpy(name,cat.name);
cout<<"use operator ="<<endl;
return *this;
}
};
int main(){
Cat c1("there is a cat"); //use constructor
Cat c2(c1); //use copy constructor
Cat c3 = c2; // use copy constructor
Cat c4,c5;
c5= c4 = c3; // use operator =
return 0;
}
下面粘貼下結果: