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

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

 

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

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

posted @ 2012-05-08 23:36  HarryChenThu  阅读(232)  评论(0编辑  收藏  举报