加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C++中复制构造函数被调用的三种情况

发布时间:2020-12-16 09:14:19 所属栏目:百科 来源:网络整理
导读:C++中的构造函数 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;

      }

以上三种情况是比较常见的复制构造函数被调用的例子

欢迎讨论,斧正

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读