zoukankan      html  css  js  c++  java
  • 区分一下强制类型转换运算符重载/赋值运算符重载/对象定义的赋值

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

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

    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

  • 相关阅读:
    9.17考试
    Something
    tesuto-Mobius
    7.22考试
    填坑...P1546 最短网络 Agri-Net
    P1125 笨小猴
    P2822 组合数问题
    致我们曾经刷过的水题
    Luogu P1186 玛丽卡
    Luogu P1726 上白泽慧音
  • 原文地址:https://www.cnblogs.com/sdqxcxh/p/2490973.html
Copyright © 2011-2022 走看看