码迷,mamicode.com
首页 > 编程语言 > 详细

c++ 复制控制 之赋值操作符

时间:2015-06-07 09:48:44      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:



 重载操作符

     重载操作符是一些函数, 其名字为operator后跟着其所定义的操作符符号.  如operator =, operator +, operator * 等等.

     操作符函数和普通函数一样, 也是 返回值 + 函数名 + (形参表) , 形参表必须具有与该操作符操作数数目相同的形参(如果操作符是一个成员, 则包括隐式this形参).


赋值操作符

     赋值 是二元运算, 所以该操作符函数有两个形参: 第一个形参对应着左操作数, 第二个形参对应右操作数.

     大多数操作符可以定义为成员函数或非成员函数. 当操作符为成员函数时, 它的第一个操作数隐式绑定到this指针. 有些操作符(包括赋值操作符) 必须是定义自己的类的成员. 因为赋值必须是类的成员, 所以this绑定到指向左操作数的指针. 因此,赋值操作符接受单个形参, 且该形参是同一类类型的对象. 右操作数一般为const引用传递.


合成赋值操作符     

    合成赋值操作符与合成复制构造函数的操作类似, 它会执行逐个成员赋值: 右操作数对象的每个成员赋值给左操作数对象的对应成员. 除数组之外, 每个成员用所属的常规方式进行赋值. 对于数组, 则给每个数组元素赋值.

class Test

   private:

      int i;

      double d;

}

该类的合成赋值操作符可能如下:

Test& Test::operator=(const Test& right)

{

   i=right.i;

   d=right.d;

   return *this;

}

合成赋值操作符返回对左操作数对象的引用.


注:  应该把复制和赋值看作一个单元, 如果需要其中一个, 我们几乎也肯定需要另一个.


复制构造函数和赋值操作符的区别?

   复制构造函数和赋值操作符都是用已有的对象A来创建另一个对象B, 区别是复制构造函数是创建一个全新的对象, 即调用复制构造函数之前B是不存在的, 而赋值操作符是处理两个已有的对象, 即赋值前B是存在的. 例如:

   Test A(B) ; //复制构造函数

   Test C= D; //复制构造函数

   Test E;

   E= A;  //赋值运算符


<span style="font-size:18px;">写一个函数来验证一下:</span>
<span style="font-size:18px;">  </span><pre name="code" class="cpp"><span style="font-size:18px;">#include <iostream>
using namespace std;
class Exam
{ 
   public:
   Exam(){}
   Exam(const Exam& other)
   {   
       cout<<"This is a Exam(const Exam& other)"<<endl;
   }
   Exam& operator= (const Exam& other)
   {
      cout<<"This is a operator= "<<endl;
      return *this;
   }
};

int main()
{
  Exam A;
  Exam B(A);  //拷贝构造函数
  Exam C= A;  //拷贝构造函数
  Exam D;  //重载赋值运算符
  D= A;
  return 0;
}
</span>



运行结果如下:

技术分享


ok!

c++ 复制控制 之赋值操作符

标签:

原文地址:http://blog.csdn.net/nizhannizhan/article/details/46389829

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!