• 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()函数时会调用拷贝构造函数;即实参向形参传递数据时 进行了实参向形参的数据的拷贝 调用了自己写的赋值构造函数
    }
    
  • 相关阅读:
    RPC服务和HTTP服务对比
    常用工具地址
    maven教程
    【springboot】知识点总结
    [JZOJ4272] [NOIP2015模拟10.28B组] 序章-弗兰德的秘密 解题报告(树形DP)
    [NOIP2015模拟10.22] 最大子矩阵 解题报告(单调栈)
    [NOIP2015模拟10.27] 挑竹签 解题报告(拓扑排序)
    [NOIP2015模拟10.27] [JZOJ4270] 魔道研究 解题报告(动态开点+权值线段树上二分)
    [NOIP2015模拟10.22] 最小代价 解题报告 (最小生成树)
    BZOJ4479 [JSOI2013] 吃货jyy 解题报告(三进制状态压缩+欧拉回路)
  • 原文地址:https://www.cnblogs.com/D-Rui/p/9769171.html
Copyright © 2020-2023  润新知