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;  // 声明并初始化调用拷贝构造函数

  • 相关阅读:
    刚刚开通
    腾讯面试经历2015
    排序之归并排序
    AC自动机
    后缀数组初步
    概率dp初探
    【NOIP2015】反思+题解
    Built-in functions
    poj2528 Mayor's posters(线段树区间覆盖)
    Codeforces #317 C.Lengthening Sticks(数学)
  • 原文地址:https://www.cnblogs.com/tongyishu/p/13276528.html
Copyright © 2011-2022 走看看