• const成员-拷贝构造函数(copy constructor)-浅拷贝、深拷贝


    const成员

    • const成员:被const修饰的成员变量、非静态成员函数
    • 必须类里面初始化
    class Car {
    public:
        const int m_price = 0;    //const常量设置
        Car() :m_price(0) {}    //也可以在构造函数中初始化
        void run() const {    //const一般写最后
            cout << "run()" << endl;
    
            m_price = 10;
        }
    };
    

    const成员函数

    • 两个同名函数构成了重载
    void run() const {}
    void run() {}
    

    引用类型成员变量必须初始化

    int age;
    int & m_price = age;
    car(int &price) :m_price(price) {}
    

    拷贝构造函数(copy constructor)

    • 拷贝构造函数是构造函数的一种
    • 当利用已存在的对象创建一个新对象时(类似于拷贝),就会调用新对象的拷贝构造函数进行初始化
    • 拷贝构造函数的格式是固定的,接收一个const引用作为参数
    //拷贝构造函数
    Car(const Car &car) {
        cout << "Car(const Car &car)" << endl;
    }
    Car car4(car3);
    

    浅拷贝

    浅拷贝:指针类型的变量只会拷贝地址值

    • 编译器默认的提供的拷贝是浅拷贝(shallow copy)

    • 堆空间指向栈空间都很危险
      栈空间随机都可能回收,堆空间可以自己控制

    • 在堆空间再申请一个空间用于拷贝

    深拷贝

    public:
        Car(int price = 0, char *name = NULL) :m_price(price){
            if (name == NULL ) return;
    
            // 申请新的堆空间
            m_name = new char[strlen(name) + 1] {};
            // 拷贝字符串数据到新的堆空间
            strcpy(m_name, name);
        }
    
        ~Car(){
            if (m_name == NULL) return;
            delete[] m_name;
            m_name = NULL;
        }
    

    • 浅拷贝(shallow copy):指针类型的变量只会拷贝地址值
    • 深拷贝(deep copy):将指针指向的内容拷贝到新的存储空间
        Car(const Car &car) :m_price(car.m_price) {
            if (car.name == NULL ) return;
    
            // 申请新的堆空间
            m_name = new char[strlen(name) + 1] {};
            // 拷贝字符串数据到新的堆空间
            strcpy(m_name, name);
        }
    
  • 相关阅读:
    插入排序法
    二分查找
    排序算法
    牛客网 猜数游戏
    决策树及随机森林(笔记)
    knn的缺陷及改进
    区块链、比特币简易PYTHON实现版笔记
    B树,B+树,以及它们和数据库索引之间的关系
    Balanced Binary Tree
    Advantages & Disadvantages of Recursion
  • 原文地址:https://www.cnblogs.com/sec875/p/12328947.html
Copyright © 2020-2023  润新知