zoukankan      html  css  js  c++  java
  • 拷贝构造函数

    1.概念

    1)如果构造函数的第一个参数是自身类型的引用(几乎总是const,也可以接受非const,但是无论如何都必须是引用),且任何额外参数都有默认值,则它是拷贝构造函数

    2)第一个参数必须是自身类型的引用:如果某个函数具有这个类的非引用参数,调用过程中要进行拷贝初始化,此时要调用拷贝构造函数来拷贝实参,如果拷贝构造函数的第一个参数不是引用,我们又需要拷贝实参,这样将无限循环下去

    3)拷贝构造函数只有一个形参时,也可以被explicit修饰,当被explicit修饰时,不能使用“=”来调用拷贝构造函数

    class A {
    public:
        A(){}
        A(const A&) {
            cout << "我是A的拷贝构造函数" << endl;
        }
    };
    
    class B {
    public:
        B() {}
        explicit B(const B&) {
            cout << "我是B的拷贝构造函数" << endl;
        }
    };
    int main()
    {
        A a;
        A aa1(a);
        A aa2=a;
    
        B b;
        B bb1(b);
        //B bb2 = b;    //如果有此句,则发生编译错误,因为B的拷贝构造函数是explicit的
    
        return 0;
    }

    运行结果:

    2.合成拷贝构造函数

      如果我们没有为一个类定义拷贝构造函数,编译器将会为我们定义一个,这个就叫合成拷贝构造函数

  • 相关阅读:
    圣战 [奇环, 树上差分]
    花火之声不闻于耳 [线段树]
    SP2878 KNIGHTS
    P5300 [GXOI/GZOI2019]与或和 [单调栈]
    Speike [线段树, 动态规划]
    Jerry [动态规划]
    JSON对象
    正则书写
    flex布局实践
    数组对象的深拷贝与浅拷贝
  • 原文地址:https://www.cnblogs.com/Joezzz/p/9683697.html
Copyright © 2011-2022 走看看