• c++ 一文看懂类的构造函数与赋值操作函数


    class Integer {
    public:
        int val;
        Integer() { // 默认构造函数
            std::cout << "Integer()" << std::endl;
        }
    
        Integer(const Integer& v) { // 拷贝构造函数,意右值一定为该类的引用!!!
            std::cout << "Integer(const Integer& v)" << std::endl;
        }
    
        Integer& operator = (const Integer& v) { // 赋值操作函数,注意右值一定为该类的引用!!!
            std::cout << "Integer& operator = (const Integer& v)" << std::endl;
            return *this;
        }
    
        Integer(int v): val(v) { // 自定义构造函数,用于带参构造
            std::cout << "Integer(int v)" << std::endl;
        }
    
        operator int() const { // 类型转换运算符
            std::cout << "operator int() const" << std::endl;
            return val;
        }
    };
    
    int main()
    {
        Integer v1;      // 调用默认构造函数 Integer()
        v1 = 1;                       // 先调用 Integer(int v) 将 1 转换成 Integer, 再调用赋值操作函数 Integer& operator = (const Integer& v) 进行赋值
        Integer v2 = 1;          // 调用构造函数 Integer(int v), 等价于 Integer v2 = { 1 };
        int v3 = v2;             // 先调用 operator int() const 隐式地将 v2 转换 int 类型,再赋值
        v1 = v2;                    // 调用 Integer& operator = (const Integer& v) 赋值操作函数
        Integer v4 = v1;       // 调用拷贝构造函数 Integer(const Integer& v)
        Integer v5(v1);        // 用拷贝构造函数 Integer(const Integer& v)
        // 结果输出依次为:
        // Integer()
        // Integer(int v)
        // Integer& operator = (const Integer& v)
        // Integer(int v)
        // operator int() const
        // Integer& operator = (const Integer& v)
        // Integer(const Integer& v)
        // Integer(const Integer& v)
        return 0;
    }

    调用拷贝构造函数与赋值操作函数的区别在于是否在声明的时候就进行初始化

    Integer v2; // 声明并未初始化

    Integer v1;

    v2 = v1;  // 调用赋值操作函数

    Integer v1;

    Integer v2 = v1;  // 声明并初始化调用拷贝构造函数

  • 相关阅读:
    HTTP代理简介
    解决键盘Alt+Win键功能反了的问题
    设置锁屏后关闭显示器时间
    通过ffmpeg下载在线HTTP Live Stream视频
    一款好用的磁盘占用分析工具——WizTree
    vite2 打包的时候vendorxxx.js文件过大的解决方法
    nfPress —— 在线文档也可以加载组件和编写代码
    通过UI库深入了解Vue的插槽的使用技巧
    基于 vite2 + Vue3 写一个在线帮助文档工具
    【mysql】sql查看mysql 数据库 数据表 容量大小
  • 原文地址:https://www.cnblogs.com/tongyishu/p/13276528.html
Copyright © 2020-2023  润新知