今天在网上看到一个关于operator的特殊用法.故编写模拟代码,作为兴趣研究
记录下来.
class Int
{
public:
Int( int i )
{
x = i;
cout << "Constructing " << ( void* )this << " Value: " << x << endl;
};
~Int( ) {
cout << "Destructing " << ( void* )this << " Value: " << x << endl;
};
Int& operator =(const Int & val)
{
x = val.x;
cout << " assign be called" << endl;
return *this;
}
friend ostream& operator<<(ostream & out , const Int& s);
/*
typedef bool BOOL;
operator BOOL()
{
cout << "convert to bool." << endl;
}*/
typedef int INT;
operator INT()
{
cout << "convert to INT" << endl;
}
int x;
};
int main( )
{
auto_ptr<Int> pi ( new Int( 5 ) );
Int s1 = 3;
if (s1) //会调用operator BOOL或operator INT.
cout << s1 << endl;
else
cout <<"NULL" << endl;
}
上述红色注释部分,是对象本体向bool型转化的一个实例.当调用if (s1)时会被调用到。而且类似这样的函数似乎只能有一个
当operator BOOL 和 operator INT同时存在时,程序总是调用的是首个运算符。也就是说当operator BOOL和operator INT
都存在时,按照顺序,会调用operator BOOL.而当operator BOOL被注释掉后,则会调用operator INT.