拷贝构造函数和赋值函数的区别:看看下面代码,仔细想想两者的区别。
拷贝构造函数是在定义一个对象的时候调用的,如
Class String
{
//....
};
String a=b;//b为一个String类型的对象
或者
String a(b);
赋值函数是在用一个类的实例去赋值给另一个实例的时候调用的,如
String a;
a=b;
类String的构造函数、析构函数和赋值函数的原型分别如下:
class String
{
public:
String(const char *str=NULL); //构造函数
String(const String &other); //拷贝构造函数
~String(void); //析构函数
String &operator=(const String &other); //赋值函数
private:
char *m_data; //保存字符串
};
//constructor
String::String(const char *str)
{
if(str==NULL)
{
m_data=new char[1];
m_data[0]='\0';
}
else
{
int len=strlen(str);
m_data=new char[len+1];
assert(m_data!=NULL);
strcpy(m_data,str);
}
}
//copy constructor:使用在定义一个类型变量的时候
String::String(const String &other)
{
int length=strlen(other.m_data);
m_data=new char[length+1];
assert(m_data!=NULL);
strcpy(m_data,other.m_data);
}
//destructor
String::~String(void)
{
delete []m_data;
}
//赋值函数:使用在把一个类的实例赋值给另一个类的实例
String &String::operator = (const String &other)
{
if(this==&other)
{
return *this;
}
delete []m_data;
int length=strlen(other.m_data);
m_data=new char[length+1];
assert(m_data!=NULL);
strcpy(m_data,other.m_data);
return *this;
}
拷贝构造函数和赋值函数的区别:
拷贝构造函数是在值传递的时候调用的,一般有三种情况:
1、用一个对象去初始化另一个对象,string a=b;或者string a(b);
2、函数参数是对象的值传递。如void function(string a);
3、函数以值传递形式返回对象。如string function(void );
而赋值函数是用一个对象赋值给另一个对象的时候调用的
如string a("hello");
string b;
b=a;//这里就调用赋值构造函数。