C++中的构造函数

c++中的构造函数分为构造函数,和复制构造函数,相比于构造函数,复制构造函数使用更加方便,快捷。构造函数可以有多个,二复制构造函数只能有一个,因为复制构造函数的参数
只能是当前类的一个对象,参数表是固定的,无法重载,若用户没有定义自己的辅助构造函数,系统会自动生成一个复制构造函数,其作用是将参数的之赋予当前的对象.若用户自己定义了复制构造函数,系统则不会生成默认复制构造函数。用户自己定义的复制构造函数功能可以自己构造,不一定执行复制的功能。

复制构造函数同构造函数的功能大体相同·,却又有不同之处,下面介绍复制构造函数在3中情况下的调用

1.当用一个对象去初始化同类的另一个对象时,会引发复制构造函数的调用

以下两条语句都会导致复制构造函数的调用

     Complex c1(c2);
Complex c1=c2;

这两条语句时等价的,其中第二句是初始化语句,不是赋值语句

下面这一条语句不会调用复制构造函数

     Complex c1,c2;
c1=c2;

2.作为形参的对象,使用复制构造函数初始化的
以下语句可以证明
```

#include<iostream>
using namespace std;
class A{
public:
A(){};//构造函数
A(A&a)//复制构造函数
{
cout<<"Copy constructer called"<<endl;
}
};
void Func(A a)//普通函数
{ }
int main()
{
A b;
Func(b);//此语句相当于是将b复制给Func(a)中的a,导致调用复制构造函数
retur 0; }
程序运行截图
![](https://img2018.cnblogs.com/blog/1787128/201909/1787128-20190923130715086-1371240220.png) 3.如果函数返回的是类A的对象,那么函数返回时,类A的复制构造函数会被调用
程序如下
```
#include<iostream>
using namespace std; class A{
public:
int v;
A(int i){
v=i;
};//构造函数
A(A&a)//复制构造函数
{
cout<<"Copy constructer called"<<endl;
}
};
A a(4);
A Func()//普通函数
{ return a;
}
int main()
{
cout<<Func().v<<endl;//此语句中的Func()是一个类A的对象,但是不是a,只是用a初始化。
return 0; }
```
![](https://img2018.cnblogs.com/blog/1787128/201909/1787128-20190923131944479-314999831.png) ##
以上三种情况是比较常见的复制构造函数被调用的例子 欢迎讨论,斧正

C++中复制构造函数被调用的三种情况的更多相关文章

  1. 复制构造函数被调用的三种情况------新标准c++程序设计

    1.当用一个对象去初始化同类的另一个对象时,会引发复制构造函数被调用.例如,下面的两条语句都会引发复制构造函数的调用,用以初始化c2. C c2 (c1); C c2=c1; 这两条语句是等价的.注意 ...

  2. C++中复制构造函数和赋值操作符

    先看一个例子: 定义了一个类:

  3. C++中复制构造函数与重载赋值操作符总结

    前言 这篇文章将对C++中复制构造函数和重载赋值操作符进行总结,包括以下内容: 1.复制构造函数和重载赋值操作符的定义: 2.复制构造函数和重载赋值操作符的调用时机: 3.复制构造函数和重载赋值操作符 ...

  4. 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理

    服务器文档下载zip格式   刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...

  5. Spring如何使用JdbcTemplate调用存储过程的三种情况

    注:原文 <Spring如何使用JdbcTemplate调用存储过程的三种情况 > Spring的SimpleJdbcTemplate将存储过程的调用进行了良好的封装,下面列出使用Jdbc ...

  6. SpringBoot2.0.2 Application调用的三种方式

    一.注解 @SpringBootApplication            点开查看源码是由多个注解合成的注解,其中主要的注解有:            @SpringBootConfigurati ...

  7. js中的数据类型隐式转换的三种情况

    js的数据类型隐式转换主要分为三种情况: 1. 转换为boolean类型 2. 转换为number类型 3. 转换为string类型 转换为boolean类型 数据在 逻辑判断 和 逻辑运算 之中会隐 ...

  8. (转)在网页中JS函数自动执行常用三种方法

    原文:http://blog.sina.com.cn/s/blog_6f6b4c3c0100nxx8.html 在网页中JS函数自动执行常用三种方法 在网页中JS函数自动执行常用三种方法 在HTML中 ...

  9. 转 Velocity中加载vm文件的三种方式

    Velocity中加载vm文件的三种方式   velocitypropertiespath Velocity中加载vm文件的三种方式:    方式一:加载classpath目录下的vm文件 Prope ...

随机推荐

  1. 如何查看dll或者exe是X86还是X64架构

    使用VS里面的dumpbin.exe 用法:dumpbin /headers *.exe(需要运行vcvarsall.bat) C32 or Winhex PE  L为x86.PE  d†为x64 P ...

  2. [信息安全] 05 X.509 公钥证书的格式标准

    X.509是# 公钥证书的格式标准, 广泛用于TLS/SSL安全通信或者其他需要认证的环境中.X.509证书可以由# CA颁发,也可以自签名产生. 1 Overview {#1-overview} X ...

  3. 04-Spring01-IOC

    今日知识 1. Spring IOC控制反转(Inverse of control) 2. Spring DI依赖注入(Dependency Injection ) Spring 1. 概念:简单来说 ...

  4. python常用模块集合

    python常用模块集合 Python自定义模块 python collections模块/系列 Python 常用模块-json/pickle序列化/反序列化 python 常用模块os系统接口 p ...

  5. Apache 容器 Directory Location Files 及htaccess文件

    配置段容器的类型 相关模块 core mod_proxy 相关指令 <Directory> <DirectoryMatch> <Files> <FilesMa ...

  6. centos 配置虚拟环境

    1.pip install virtualenvwrapper (pip install virtualenv virtualenvwrapper)2.export WORKON_HOME=/home ...

  7. pyhton项目和晋江文学城数据分析项目

     1.图书管理系统 图1.图书管理系统(作者信息列表页面) 图2.图书管理系统(作者信息修改页面) 2.个人博客网页设计 图3.博客(我的日记-->个人日记)页面 图4.博客(关于我--> ...

  8. 多线程笔记 - provider-consumer

    通过多线程实现一个简单的生产者-消费者案例(笔记). 首先定义一个要生产消费的数据类 : public class Data { private String id; private String n ...

  9. a链接四种伪类状态切换实现人机交互

    常见的color, font-family, background 等css属性都能够设置链接的样式,a链接的特殊性在于能够根据它们所处的状态来设置它们的样式.a标签与人交互的4个状态属于伪类状态切换 ...

  10. Java工作流系统jflow从表功能介绍一

    关键词:工作流快速开发平台  工作流流设计  业务流程管理   asp.net 开源工作流  bpm工作流系统  java工作流主流框架  自定义工作流引擎 表单设计器  流程设计器 从表也叫明细表, ...