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

    拷贝构造函数

    1. 什么是拷贝构造函数?

        拷贝构造函数,又称复制构造函数,是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他对象的构建及初始化。其唯一的形参必须是引用,但并不限制为const,一般普遍的会加上const限制。此函数经常用在函数调用时用户定义类型的值传递及返回。拷贝构造函数要调用基类的拷贝构造函数和成员函数。如果可以的话,它将用常量方式调用,另外,也可以用非常量方式调用。

    2.拷贝构造函数的用途

    • 通过同一类型的对象来初始化新的对象
    • 复制对象,并从函数返回这个对象
    • 复制对象把他作为参数传给函数

      *当重写拷贝构造函数时需要同时写出普通构造函数!

    3.拷贝构造函数实例

    1.通过同一类型的对象来初始化新的对象

    #include<bits/stdc++.h>
    
    using namespace std;
    
    class A
    {
    public:
        int a;
    public:
        A(int temp)
        {cout << "调用构造函数初始化!!" << endl;
        a = temp;
        };
        A(const A &temp)   //拷贝构造函数参数应该使用 const 和 & 修饰
        {
            cout << "调用拷贝构造初始化!!" << endl;
            a = temp.a;
        }
    
    };
    
    int main()
    {
        A a(111);  //使用普通构造函数初始化
        A test2 = a;//调用拷贝构造初始化
    
    }
    

    2.复制对象,并从函数返回这个对象

    #include<bits/stdc++.h>
    
    using namespace std;
    
    class A
    {
    public:
        int a;
    public:
        A(int temp)
        {cout << "调用构造函数初始化!!" << endl;
        a = temp;
        };
        A(const A &temp)   //拷贝构造函数参数应该使用 const 和 & 修饰
        {
            cout << "调用拷贝构造初始化!!" << endl;
            a = temp.a;
        }
    
    };
    
    A test()
    {
        A temp(10);
        return temp;
    
    }
    
    int main()
    {
     test();//当对象最为函数返回值时调用拷贝构造
    
    }
    

    3.复制对象把他作为参数传给函数

    #include<bits/stdc++.h>
    
    using namespace std;
    
    class A
    {
    public:
        int a;
    public:
        A(int temp)
        {cout << "调用构造函数初始化!!" << endl;
        a = temp;
        };
        A(const A &temp)   //拷贝构造函数参数应该使用 const 和 & 修饰
        {
            cout << "调用拷贝构造初始化!!" << endl;
            a = temp.a;
        }
    
    };
    void test (A temp)
    {
    
    };
    int main()
    {
        A a(111);  //使用普通构造函数初始化
        test(a);   //当a传入test()函数时会调用拷贝构造函数;即实参向形参传递数据时 进行了实参向形参的数据的拷贝 调用了自己写的赋值构造函数
    }
    
  • 相关阅读:
    java 的 CopyOnWriteArrayList类
    AtomicInteger类的简单应用
    关于java的关键字 transient
    关于ArrayList的一些源码分析
    Eclipse新建java类的时候,自动创建注释
    关于spring-data-jpa的排序问题
    hibernate CascadeType属性
    springBoot框架不同环境读取不同的配置文件
    你迷茫的原因在于读书太少而想的太多!!!
    学历是铜牌,能力是银牌,人脉是金牌,思维是王牌
  • 原文地址:https://www.cnblogs.com/D-Rui/p/9769171.html
Copyright © 2011-2022 走看看