gpt4 book ai didi

详解c/c++赋值函数(重载=号运算符)

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章详解c/c++赋值函数(重载=号运算符)由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

首先c++里的各种运算符都是用函数实现的,比如=,就等号函数.

所以当用=给一个对象赋值的时候,实际调用的是=号所对应的=号函数.

分析下面的代码 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
using namespace std;
class Test{
public :
  explicit Test(){
   data = 0;
  }
  explicit Test( int d):data(d){
   cout << "C:" << this << ":" << this ->data << endl;
  }
  //拷贝构造函数                           
  Test( const Test &t){
   cout << "Copy:" << this << endl;
   data = t.data;
  }
  //重载=号运算符                     
  Test& operator= ( const Test &t){
   cout << "assign" << this << endl;
   if ( this != &t){
    data = t.data;
   }
   return * this ;
  }
  ~Test(){
   cout << "F:" << this << ":" << this ->data << endl;
  }
private :
  int data;
};
int main(){
  Test t1(10);
  Test t2, t3;
  t3 = t2 = t1;
  return 0;
}

重点分析下面的函数 。

?
1
2
3
4
5
6
7
8
//重载=号运算符                     
Test& operator = ( const Test &t){
  cout << "assign" << this << endl;
  if ( this != &t){
   data = t.data;
  }
  return * this ;
}

分析点:

1,operator =是什么意思 。

2,参数为什么是引用类型 。

3,参数为什么有const限制 。

4,为什么有if(this != &t)的判断 。

5,为什么有返回值 。

6,为什么返回值的类型是引用类型 。

分析点解答:

Test t2,

t2 = t1;//实际的运作方式是t2.operator=(t1),所以函数里面的this就是t2 。

1,重载类Test的=号函数,当对类Test的对象用=号操作的时候,就会调用这个重载后的函数 。

2,避免调用拷贝构造函数 。

3,避免不小心修改里参数t里面成员变量的值(t.data = 100;) 。

4,防止自己给自己赋值 。

5,为了能够使用 t3 = t2 = t1。如果没有返回值,则t3.operator=(t2=t1),的参数里面t2=t1就没有返回值,所以编译不过.

6,不是引用也可以,用引用类型是防止老版本的编译器,在return处调用拷贝构造函数,新版本的编译器(gcc 4.8.5-20),即使不用引用类型,就不会调用拷贝构造函数.

总结 。

以上所述是小编给大家介绍的c/c++赋值函数(重载=号运算符),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我网站的支持! 。

原文链接:https://www.cnblogs.com/xiaoshiwang/archive/2018/08/17/9491365.html 。

最后此篇关于详解c/c++赋值函数(重载=号运算符)的文章就讲到这里了,如果你想了解更多关于详解c/c++赋值函数(重载=号运算符)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com