• 区分一下强制类型转换运算符重载/赋值运算符重载/对象定义的赋值


          这三个名字可能很绕,看着也很不一样,但其实是三个很容易混淆的概念,并且经常在实际编程中遇到。这里拿出来比较一下。

          首先是强制类型转换运算符的重载,作用是当前对象向其他类型的转换,常见的形式是

    operator int();
    Integer::operator int()
    {
        return x;
    }

          调用方式类似于

    Integer c(10);
    int a=c;

          在函数调用的时候,类型转换的重载也会被隐式调用,比如下面一种情况

    void print(int n)
    {
        cout<<n<<endl;
    }
    Integer i(10);
    print(i);

          与之相对应的是赋值运算符重载,赋值运算符是从别的类型转换成当前对象,常见的形式如下:

    Integer operator=(int n);
    Integer Integer::operator=( int n )
    {
        return Integer(n);
    }

           调用方式类似于

    Integer c;
    c=11;

           最后是对象定义时的赋值,如果你定义了如下的一个构造函数

    Integer(int _x):x(_x){}

          那么你可以用这种方式定义一个对象

    Integer c=11;

          需要特别区别的是,定义时的赋值是会不会调用赋值运算符重载的。另外,如果需要限制隐式类型转换,可以使用explicit关键字,见参考文献[1].

    参考文献

    C++笔记(1)explicit构造函数

    http://www.cnblogs.com/cutepig/archive/2009/01/14/1375917.html

  • 相关阅读:
    Rstudio代码的快捷键
    sqlhelper帮助类
    图片上传
    反射获取 obj类 的属性 与对应值
    jquery 操作 动态创建的 元素
    Path类使用
    jquery 小数计算保持精度
    js字符串转成数字
    DateTime.Now.ToString()的各种字符串
    Linq语句 动态组建
  • 原文地址:https://www.cnblogs.com/sdqxcxh/p/2490973.html
Copyright © 2020-2023  润新知