c++学习笔记(九)

日期 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操作,节约时间效率高。
但是如果没有写自我检测,受影响的很可能不止效率,结果也许会出错,如图所示

猜你喜欢

转载自www.cnblogs.com/lkdj/p/12269009.html