大佬教程收集整理的这篇文章主要介绍了赋值运算符重载(C++实现)详解,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
numberArray first(3,10.5);
numberArray second(5,20.5);
first = second;
如果要将第一个对象 first 设置为与第二个对象 second 完全相同的值,此时,C++ 将再次执行按成员复制,从第二个对象复制成员到第一个对象中,这将导致两个对象中的指针指向同一内存。numberArray second = first; //复制构造函数被调用
该语句创建 second 对象,并使用 first 的值初始化它,这是一个初始化语句,它导致复制构造函数被调用来执行初始化。但是,以下语句则不一样:operator=
的运算符函数作为该类的成员函数。例如,要为 numberArray 类执行此操作,则可以按如下所示编写该类的声明:class numberArray { private: double *aPtr; int arraySize; public: void operator = (const numberArray & right) ;//重载运算符 numberArray(const numberArray &); numberArray(int size,double value); ~numberArray() { if (arraySize > 0) delete [ ] aPtr; } void print() const; void SETVALue(double value); };现在先来看一看函数头或原型,然后再看一看运算符函数本身是如何实现的。函数头的各个主要部分可以分解如下,如图 1 所示。
operator =
。由于该运算符函数是类的实例成员,因此只能通过类的对象调用。通过它调用的类的对象被认为是赋值运算符的左操作数,而传递给该函数的形参被认为是赋值运算符的右操作数。
numberArray left(3,10.5);
numberArray right(5,20.5);
left = right;
注意,运算符函数的形参不必按引用传递,也不必声明为 const。在该示例中使用引用形参是出于提高效率的原因:引用参数避免了复制被传递作为形参的对象的开销。const 用于保护形参不被改变。a = b = c;
层叠赋值语句之所以有效,是因为内置赋值运算符在起作用。在赋值操作执行之后,它返回其左侧操作数的引用。因此,在该语句中,表达式 b = c 导致 c 被赋值给 b,然后返回对 b 的引用,而这个返回的引用的值最后被赋给了 a。x = x;
那么这并不需要执行任何复制操作,结果就是一个对象被赋值给了它自己(像这样的赋值语句可能会在某些大型程序中出现)。可以通过检查赋值语句左侧对象的 this 地址是否和右侧对象的地址相同来测试其可能性,示例语句如下:if (this ! = &right) { /* 复制对象...*/ }
赋值运算符函数通过删除分配给指定对象中的指针的内存开始。在此之后,它将以与该类的复制构造函数几乎相同的方式创建另一个对象的副本。函数的最后操作是通过引用返回赋值语句左侧的 *this 对象。以下就是该函数的代码:numberArray& numberArray::operator=(const numberArray &right) { if (this != &right) { if (arraySize > 0) { delete [] aPtr; } arraySize = right.arraySize; aPtr = new double[arraySize]; for (int index = 0; index < arraySize; index++) { aPtr[index] = right.aPtr[index]; } } return *this; }
以上是大佬教程为你收集整理的赋值运算符重载(C++实现)详解全部内容,希望文章能够帮你解决赋值运算符重载(C++实现)详解所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。