zoukankan      html  css  js  c++  java
  • 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;  // 声明并初始化调用拷贝构造函数

  • 相关阅读:
    left join
    order by 对null的处理
    checkbox不显示,试试去掉-webkit-appearance这个样式
    浅谈ES6的let和const的异同点
    ES6中箭头函数的作用
    HTML页面每次打开的时候都清除页面缓存
    解决HTML加载时,外部js文件引用较多,影响页面打开速度问题
    JQuery和Zepto的差异(部分)
    vue-router 快速入门
    vue-resource插件使用
  • 原文地址:https://www.cnblogs.com/tongyishu/p/13276528.html
Copyright © 2011-2022 走看看