1一般有点长,解释operator 和conversion 类型转换
微软 conversion的原解释
http://msdn.microsoft.com/zh-cn/library/Vstudio/5s5sk305(v=vs.100).aspx
conversion另一例:complex举例
2
3
在一个模板类中有这样一个运算符重载:
template<typename T>
class XXX
{
....
operator T()const {}
...
}
请问这个重载的是T这个运算符 那么他怎么使用呢?
这是类型转换运算符,只要你把XXX对象隐式或者显式转换为T对象时,它自动被调用
---------------------
4 重载选择决定参数的几个条件
c++类的隐式转换与强制转换重载详解
http://www.jb51.net/article/41334.htm ****(重点讲解看下)
5
百度整章,很长,运算符的重载
6
http://www.jb51.net/article/41334.htm
class A
{
int a;
public:
A(){ };
A(int _a) { a = _a; };
operator int() { return a; }
};
int main()
{
A a(10);
//A a2 = (int)(int)a;
A a2 = a; // 默认拷贝 没调用属于上面的函数
//A a2=(int)a ;//这时候调用的就是operator int(){return a;}
return 0;
}
终结结论:
转换函数
转换函数又称类型强制转换成员函数,它是类中的一个非静态成员函数。它的定义格式如下:
复制代码 代码如下:
class<类型说明符1>
{
public:
operator<类型说明符2>();
…
}
这个转换函数定义了由<类型说明符1>到<类型说明符2>之间的映射关系。可见,转换函数是用来将一种类型的数据转换成为另一种类型。下面通过一个例子说明转换函数的功能。
详细出处参考:http://www.jb51.net/article/41334.htm
另一例:解释了if()时对类的处理是调用强制类型转换来判断的:
operator overloading
C++可能通过operator 重载隐式转换,格式如下: operator 类型T (),如下所示
class A {
public:
operator B* () { return this->b_;}
operator const B* () {return this->b_;}
operator B& () {return *this->b_;}
private: B* b_;
};
A a;
当if(a),编译时,其中它转换成if(a.operator B*()),其实也就是判断 if(a.b_)