C++中operator的另一种用法
几乎所有的C++教材上都讲了operator在C++中是重载操作符的关键字,但是恕我学业不精,昨天研究C++的语法文件时,才发现这个关键字还可以用来定义隐式的类型转换。
参见如下代码,类A在需要的时候可以自动的转换成bool形。
- class A
- {
- ??? public:
- ????? operator bool(void)
- ????? {
- ????????? return b;
- ????? }
- ??? private:
- ????? bool b;
- };
- void main(void)
- {
- ??? A a;
- ??? bool b;
- ??? if(a)
- ??? {
- ??????? b = ! a;
- ??? }
- }
夜弓 wrote:
隐式转换有两个办法嘛
一个就是上面说的operator type_name()
另外一个是非explict的单参构造函数
不过依赖隐式转换很容易出问题,而且很难调试
恐怕只有自己写东西玩,和库作者才会用到
Posted on 04-Aug-07 at 6:41 pm | Permalink
夜弓 wrote:
补充一句
其实上面这样定义出来的还是叫做重载操作符
应该是,类型转换操作符
就像C里面常见的(char)iValue一样。
不过也可以用来进行隐式转换。
Posted on 04-Aug-07 at 10:59 pm | Permalink
小彬 wrote:
隐式类型转换可以使用构造函数以及但参数的构造函数
class type
{
int a;
public:
type (int b) {
a = b;
}
};
main ()
{
type c = 123; //在此调用的是type的构造函数,自动转换类型。不过只有在初始化对象时才可以
}
在函数调用中也行
void fun(type a)
{
…
}
main ()
{
fun (123); //并没有错误,不过一个前提是函数的形参必须是传值调用而不能引用,并且没有参数为int类型的重载函数,否则会调用参数为int的函数(涉及到候选函数问题)
}
顺便说一下,你的主页很有意思
Posted on 27-Aug-07 at 11:01 am | Permalink