日期 2.5
拷贝构造函数
Inline
String::string(const string& str)//由其名称和类的名称相同可知其为构造函数
{
m_data=new char[strlen(str.m_data)+1];
strcpy (m_data, str.m_data);
}
在运用时
string s2(s1);
和String s2=s1;
效果一样,s2是新创建出来的,故要调用构造函数。
拷贝赋值函数
假如有a,b两个对象,其中都已经存放了东西,此时希望将b拷贝赋值给a,
实现步骤如下:
将a清空
对a创建与b一样大的空间
将b拷贝到a
对应的函数如下:
Inline
String& string::operator=(const string& str)
{
If(this==&str) //检测自我赋值
Return *this;
Delete[ ]m_data; //对应步骤一
M_data=new char[ strlen(str.m_data)+1]; //对应步骤二
Strcpy(m_data,str.m_data); //对应步骤三
Return *this;
}
关于自我检测:
假如有语句:s2=s1
由之前的学习可知s2就是this。
假如检测出为自我赋值,那么可以直接进行return操作,节约时间效率高。
但是如果没有写自我检测,受影响的很可能不止效率,结果也许会出错,如图所示