colorful

zc qq:1337220912

 

C++中operator的另一种用法

http://www.joyloft.net/?p=484

几乎所有的C++教材上都讲了operator在C++中是重载操作符的关键字,但是恕我学业不精,昨天研究C++的语法文件时,才发现这个关键字还可以用来定义隐式的类型转换。

参见如下代码,类A在需要的时候可以自动的转换成bool形。

  1. class A
  2. {
  3. ??? public:
  4. ????? operator bool(void)
  5. ????? {
  6. ????????? return b;
  7. ????? }
  8. ??? private:
  9. ????? bool b;
  10. };
  11.  
  12. void main(void)
  13. {
  14. ??? A a;
  15. ??? bool b;
  16. ??? if(a)
  17. ??? {
  18. ??????? b = ! a;
  19. ??? }
  20. }

Post a comment 我有话说Trackback URI 引用路径(Trackback URI)

XML 订阅本站

本文 (链接) 由 Zenzen发表于 星期三, 八月 1st, 2007 4:09 PM,属于以下分类 编程开发.



Comments (3) left to “C++中operator的另一种用法”

  1. 夜弓 wrote:

    隐式转换有两个办法嘛
    一个就是上面说的operator type_name()
    另外一个是非explict的单参构造函数
    不过依赖隐式转换很容易出问题,而且很难调试
    恐怕只有自己写东西玩,和库作者才会用到

    Posted on 04-Aug-07 at 6:41 pm | Permalink

  2. 夜弓 wrote:

    补充一句
    其实上面这样定义出来的还是叫做重载操作符
    应该是,类型转换操作符
    就像C里面常见的(char)iValue一样。
    不过也可以用来进行隐式转换。

    Posted on 04-Aug-07 at 10:59 pm | Permalink

  3. 小彬 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 2012-03-22 20:45 多彩人生 阅读(551) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

统计

常用链接

留言簿(3)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜