一般对于初始化类变量有两种方式:

A a;

A b = a;

另一种方式是:

A a ;

A b;

a =b;

对于第一种方式,编译器相当于在b的初始化的时候,用a的引用作为复制构造函数的参数进行操作,相当于A b(a);

而对于第二种方式,则应该是用了赋值构造函数,也就是=的重载。因为a和b本身都已经重载了,就相当于把b的值赋给a了。

比如代码如下:

class mytest{public:int a;mytest(int s) :a(s){};//构造函数mytest(const mytest & test){//复制构造函数a = test.a;cout << "copy constructor used!" << endl;}void operator = (const mytest & test){//赋值构造函数a = test.a;cout << "copy assignment used!" << endl;//return *this;}
};int main(){mytest test1(2);mytest test2 = test1;cout << "---------------" << endl;mytest test3(2);test3 = test1;cout << "---------------" << endl;cout << "value of a in test2 is: " << test2.a << endl;cout << "value of a in test3 is: " << test3.a << endl;system("pause");return 0;
}

它的输出是:

需要注意的是,如果我把赋值构造函数的返回值设定为A类对象,由复制构造函数的用法,则赋值构造函数里面还会再次调用复制构造函数,比如:

class mytest{public:int a;mytest(int s) :a(s){};//构造函数mytest(const mytest & test){//复制构造函数a = test.a;cout << "copy constructor used!" << endl;}mytest operator = (const mytest & test){//赋值构造函数a = test.a;cout << "copy assignment used!" << endl;return *this;}
};int main(){mytest test1(2);mytest test2 = test1;cout << "---------------" << endl;mytest test3(2);test3 = test1;cout << "---------------" << endl;cout << "value of a in test2 is: " << test2.a << endl;cout << "value of a in test3 is: " << test3.a << endl;system("pause");return 0;
}

它的结果就是:

C++中对象初始化赋值是否需要调用operator=函数相关推荐

  1. 辗转相除法 定义函数fun求两个整数的最大公约数,主函数中输入两个整数,调用该函数得到最大公约数,最后在主函数中输出两个整数的最大公约数和最小公倍数。

    定义函数fun求两个整数的最大公约数,主函数中输入两个整数,调用该函数得到最大公约数,最后在主函数中输出两个整数的最大公约数和最小公倍数. 参考运行截图: 欧几里得算法又称辗转相除法,是指用于计算两个 ...

  2. C++中对象的赋值拷贝构造函数

    目录 1.对象与对象之间的赋值. 下面给出代码说明赋值语句 对象赋值的限制和特点 2.拷贝构造函数 拷贝构造函数的特点 自定义的拷贝构造函数的代码及运行结果 默认拷贝构造函数 调用拷贝构造函数的3种情 ...

  3. python中对象的赋值、浅拷贝和深拷贝

    1. 赋值:简单的对象引用 在python中,变量赋值实际上是简单的对象引用.在创建一个对象后,再把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是简单地拷贝了这个对象的引用. (1)原 ...

  4. PHP中call user func()和call_user_func_array()调用自定义函数小结

    call_user_func() 和 call_user_func_array(),通过传入字符串函数,可以调用自定义函数,并且支持引用,都允许用户调用自定义函数并传入一定的参数: 1.mixed c ...

  5. java 初始化顺序_Java中对象初始化顺序的详细介绍

    前言 在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的.最近我发现了一个有趣的问题,这个问题的答案乍一看下骗过了我的眼睛.看一下这三个类: package com ...

  6. java里使用等号对象赋值_在Java中对象可以赋值, 只要使用赋值号(等号)即可, 相当于生成了一个各属性与赋值对象相同的新对象。...

    本可文件_文的副的_库中以存重要件中放在数据,中只值号值对中公文管理. 对自严格件要求较然条,对象等号当于不属物的下列于经济作是(,对象等号当于化生宜于专门集中进行产,物定经途的有某农作指具种特济用, ...

  7. 根据创建的School类创建两个学校对象,为对象属性赋值,并调用相应方法。

    //School类 //学校类 public class School {     //属性:学校名  教室数目   学生数量     String schoolName;     int class ...

  8. JAVA学习第五篇--java中对象的创建过程以及函数的调用过程

    下面本文将详细介绍java语言中对象的创建过程,以及函数的调用过程. class Person{public String name="zhao";public int ege;p ...

  9. 阿里面试题——Java对象初始化

    Java对象初始化 这是一道阿里巴巴的关于Java对象初始化的面试题,堪称经典,代码很简单(编写格式做了些修改),但是需要面试者对Java中对象初始化有一个透彻的认识,那么通过这道面试题,对我有点启发 ...

最新文章

  1. git提交pull request到主项目
  2. 基于3G网络的汽车防盗报警系统视频监控设计[图]
  3. 课时 25:Kubernetes 网络模型进阶(叶磊)
  4. HTTPS 工作原理和 TCP 握手机制
  5. 在基于Spring的Web应用程序中使用Http Session
  6. JavaFX自定义控件– Nest Thermostat第1部分
  7. openssl 加密解密 指令_Shell openssl命令加密解密字符串
  8. Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  9. 自动补足算法是什么_如何自定义Shell(Fish版)的自动补全规则?
  10. JS代码 是否显示横竖条
  11. 还没搞完的排序(后期更新)
  12. 开源!让图像识别训练速度提升了8.7倍
  13. C语言的EOF是什么?getchar()!=EOF返回的是什么?
  14. 再次提升“华容道自动求解”程序效率
  15. 解决导入Beautifulsoup 报错 AttributeError: 'module' object has no attribute '_base'的问题
  16. mysql修改有外键约束的表结构
  17. 最终,我决定将代码迁出x86架构!
  18. java list转map_List转Map的三种方法
  19. word大纲视图 标题格式设置方式
  20. 与lwj问答之 C++中如何修改const变量

热门文章

  1. python下载教程-Python 如何入门?附Python教程下载
  2. python编程入门指南-Python编程初学者指南 PDF扫描版[87MB]
  3. python入门指南 许半仙-《猛一相亲指南》TXT全本 百度云网盘下载 by许半仙
  4. 普通人学python有意义吗-普通人为什么要学习Python?
  5. 语音识别错误太多?高科技巨头们偏偏“不信邪”
  6. 语音识别准确率永远达不到100%?
  7. 二倍图css,css二倍图的使用
  8. 用php写圣诞祝福页面,圣诞祝福文案 抖音圣诞节一句话祝福
  9. 优化element ui中的弹框样式
  10. 【Spring笔记】Spring配置