我是靠谱客的博主 细腻枕头,最近开发中收集的这篇文章主要介绍C++中拷贝构造函数被调用的三种情况,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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;
}

程序运行截图
在这里插入图片描述

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;
}

在这里插入图片描述
以上三种情况是比较常见的复制构造函数被调用的例子

最后

以上就是细腻枕头为你收集整理的C++中拷贝构造函数被调用的三种情况的全部内容,希望文章能够帮你解决C++中拷贝构造函数被调用的三种情况所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部