拷贝构造函数与赋值函数(运算符重载)(1)

拷贝构造函数
拷贝构造函数在三种情况下会被使用
1.使用对象来初始化对象时
2.当函数的形参是对象时
3.当函数的返回值为对象时
 2,3情况的本质还是1

//Test1.h
#include<iostream>
using namespace std;
class ST
{
private:int a;long b;
public:ST(int a=0, long b=0):a(a),b(b){cout<<"Object was built. "<<this<<endl;}ST(const ST &t);	//拷贝构造函数~ST(){cout<<"Object was free. "<<this<<endl;}ST& operator=(const ST &t);
};ST& ST::operator=(const ST &t)//赋值函数,或者叫=号运算符的重载
{cout<<"Assign: "<<this<<" = "<<&t<<endl;if(this != &t){this->a = t.a;this->b = t.b;}return *this;
}
ST::ST(const ST &t)
{cout<<"Object was copy. "<<this<<endl;this->a = t.a;this->b = t.b;
}

类中无明确的拷贝构造函数时系统会默认的提供一个拷贝构造函数

#include<iostream>
#include"Test1.h"
using namespace std;ST Get_obj(ST t)//传参时将参数拷贝一份给了函数,由于参数是对象,所以实际上还是使用对象来初始化对象。所以这是第一次拷贝
{				ST t1(t);	//使用对象来初始化对象,第二次拷贝return t1;	//返回值的生存作用域仅在此函数内,传值时传递的是t1的拷贝,又一次使用对象初始化对象,第三次拷贝
}				//所以此函数调用了三次拷贝构造函数
void main()
{ST st(10, 20);ST st1 = st;//此处调用了拷贝构造函数①ST st2(st);//此处调用了拷贝构造函数ST st3;st3 = st;//此处调用的是赋值语句②cout<<"##########################"<<endl;ST st4 = Get_obj(st);//此过程共调用三次拷贝构造函数,看起来st4的初始化也得使用拷贝构造,实则不然,由于Get_obj()方法返回的已经是一个被拷贝构造的临时对象,其可以直接为st4赋值,而不需要再次拷贝构造
}

①和②看起来虽然都是使用对象为对象赋值,但是其不同点在于,①中st1直接使用对象初始化,所以其调用的就是拷贝构造,

②时st3先进行了初始化,再用st赋值,因此其调用的就是赋值语句。

运行结果

转载于:https://www.cnblogs.com/area-h-p/p/10320506.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/364055.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GOOGLE不让我访问啦?

GOOGLE不让我访问啦? 今天上GOOGLE出现了这么一个画面,可是我就是不知道我的电脑到底中了什么毒,平常我没上什么特殊的网站,也没下载什么软件,因为这电脑我只用来做些基本的开发和看看园子里的文章而已.真不知道是怎么一回事.posted on 2007-05-05 12:46 黄尚 阅读(...) 评论(…

java条件执行方法_java 开启多线程里面如何加条件判断执行其他逻辑?

方法1&#xff1a;通过Thread类中的isAlive()方法判断线程是否处于活动状态。线程启动后&#xff0c;只要没有运行完毕&#xff0c;都会返回true。【注】如果只是要等其他线程运行结束之后再继续操作&#xff0c;可以执行t.join()&#xff0c;即&#xff1a;在t执行完毕前挂起。…

使用Jenkins / Hudson远程API检查作业状态

在进行演讲时&#xff0c;我写了一个Hudson / Jenkins插件&#xff08;适用于EclipseCon NA 2014&#xff09; &#xff0c;但我想发表有关演讲中提到的想法的博客文章。 在这篇文章中&#xff0c;我解释了如何在不使用Web界面的情况下与CI服务器进行交互。 Jenkins / Hudson远…

大数据分析和人工智能科普

一、大数据 1.1 大数据&#xff08;Big Data&#xff09; 众说纷纭&#xff01; 个人认为&#xff0c;大数据中的“大”&#xff0c;不仅仅是涉及数据规模&#xff0c;而且包含“价值“这个层面。其实无非就是大量的信息罢了&#xff0c;但是我们却能 通过各种手段从这些信息中…

Redis API的使用与理解

一、Redis 基础&#xff1a; 1、通用命令&#xff1a; keys [pattern]&#xff1a; keys * #遍历所有key&#xff1b;keys he* #以he开头的key&#xff1b; keys he[a-e]* #以‘he’开头第三个字母是a-e之间&#xff1b; keys ph? #?代码一位&#xff0c;以ph开头且字母是…

点击底部input输入框,弹出的软键盘挡住input(苹果手机使用第三方输入法 )

测试移动端页面的时候&#xff0c;偶然发现点击底部input输入框时&#xff0c;弹出的虚拟键盘偶尔会挡住input输入框。 输入框固定在页面底部&#xff0c;如图所示&#xff1a; input固定底部设计图.png点击底部input输入框唤起软键盘时&#xff0c;软键盘挡住输入框。如图所示…

java采集温湿度水浸_机房水浸传感器:智能生活不可或缺的漏水传感器

原标题&#xff1a;机房水浸传感器&#xff1a;智能生活不可或缺的漏水传感器智能化的飞速发展让人们的生活发生了重大改变&#xff0c;为保证机房的安全、稳定、高效运行&#xff0c;网络设备的良好运行状态和设备使用寿命与安全&#xff0c;通常会对网络运行环境的电力供应、…

以编程方式访问Java基本类型的大小

许多不熟悉Java的开发人员首先要了解的一件事是Java的基本原始数据类型 &#xff0c;其固定&#xff08;与平台无关&#xff09;的大小&#xff08;以位或字节为单位用二进制补码表示 &#xff09;以及它们的范围&#xff08;Java中所有数字类型都是带符号的&#xff09; &…

oracle用EXPLAIN PLAN 分析SQL语句

EXPLAIN PLAN 是一个很好的分析SQL语句的工具,它甚至可以在不执行SQL的情况下分析语句. 通过分析,我们就可以知道ORACLE是怎么样连接表,使用什么方式扫描表(索引扫描或全表扫描)以及使用到的索引名称. 你需要按照从里到外,从上到下的次序解读分析的结果. EXPLAIN PLAN分析的结果…

创建型模式:原型模式

个人公众号原文&#xff1a;创建型模式&#xff1a;原型模式 五大创建型模式之五&#xff1a;原型模式。 简介 姓名 &#xff1a;原型模式 英文名 &#xff1a;Prototype Pattern 价值观 &#xff1a;效率第一 个人介绍 &#xff1a; Specify the kinds of objects to create u…

我的前端工具集(五)提示工具之模态窗提示

我的前端工具集&#xff08;五&#xff09;提示工具之模态窗提示 liuyuhang原创&#xff0c;未经允许禁止转载 目录 我的前端工具集 1、需求 很多页面操作都需要提示&#xff0c;比如操作成功&#xff0c;操作失败之类。 总不能没事就console.log或者alert吧。 所以一个操作提…

min-width:100%和max-width:100%的区别

1.width:100%和width:auto width:100%,设定对象的宽度占父元素的100%不论设定元素的margin值是多少,不包含margin&#xff1b; width:auto&#xff0c;根据设定对象的实际大小而自适应宽度&#xff0c;考虑设定元素的Margin值得大小&#xff0c;包含Margin 2.max-width:100%和m…

Java 8 Friday:可选将保留为Java中的一个选项

在Data Geekery &#xff0c;我们喜欢Java。 而且&#xff0c;由于我们真的很喜欢jOOQ的流畅的API和查询DSL &#xff0c;我们对Java 8将为我们的生态系统带来什么感到非常兴奋。 Java 8星期五 每个星期五&#xff0c;我们都会向您展示一些不错的教程风格的Java 8新功能&#…

java动态拼接请求_在JavaWeb项目中处理静态文件或动态链接拼接网站地址的最优处理方案...

在开发网站时候我们会遇到下面问题&#xff1f;- 在引用网页中引用js和css或者动态的Servlet的时候我们是写绝对路径还是相对路径&#xff1f;- 如果写相对路径吧&#xff0c;上线偶尔会报404&#xff0c;还要手动去拼接绝对路径- 如果写绝对路径吧&#xff0c;你在本地写的时候…

新增数据库栏位脚本

IF NOT EXISTS(SELECT * FROM SYSCOLUMNSWHERE IDOBJECT_ID(NMNDIndicator) AND NAMENcheckperiod)BEGINALTER TABLE MNDIndicator ADD checkperiod NVARCHAR(100) NULL default END 转载于:https://www.cnblogs.com/snowball/archive/2007/05/14/745213.html

七天开发记录(3)

今天在网上找到了一个开发记账本微信小程序的网址 我看了一下这个APP的源代码&#xff0c;其用分为两个大包。 转载于:https://www.cnblogs.com/zjl-0217/p/10428525.html

做个商城吧(〇)

做个商城吧&#xff08;〇&#xff09; liuyuhang原创&#xff0c;未经允许进制转载&#xff01; 作为自己想写的一个系列&#xff0c;应该仔细认真的更下来 目录在文末 1、想法 自己一个人做个商城&#xff0c;这种想法一直萦绕着。 但是也有不同的声音&#xff1a; 有淘宝&am…

链表!比数组更适合做增删操作的数据结构

什么是链表&#xff1f; 链表和数组的对比&#xff1a;在大多数语言中&#xff0c;数组的大小是固定的&#xff0c;从数组的起点或中间添加或删除元素的成本很高&#xff0c;因为需要移动元素。链表中的每一个元素在内存中不是连续放置的&#xff0c;和它左右两侧元素是没有关系…

Java 8中的Base64 –加入乐趣为时不晚

最后&#xff0c;Java 8发布了。 最后&#xff0c;有一种执行Base64编码的标准方法。 长期以来&#xff0c;我们一直依赖于Apache Commons Codec&#xff08;无论如何还是很棒的&#xff09;。 内存敏感的编码人员将拼命使用sun.misc.BASE64Encoder和sun.misc.BASE64Decoder&am…

多层架构模型中的BLL 与 Model的解释

理想状态这两个可以合并到一起来&#xff0c;就是业务对象&#xff0c;但model是把这个业务对象中的数据提取了出来&#xff0c;作为一个数据载体&#xff0c;可以在层间传递。业务对象中除去这些数据剩下的方法就构成了BLL层。显示层Presentation Layer业务逻辑层Business Log…