zoukankan      html  css  js  c++  java
  • c++转换构造函数和类型转换函数

      看stl源码时,有一段代码感觉很奇怪

    iterator begin() { return (link_type)((*node).next); }

    iterator和link_type是两种不同类型,怎么能这么返回呢?翻了一下以前的笔记,发现是由转换构造函数生成临时对象再return。

    转换构造函数的作用是将某种类型的数据转换为类的对象,当一个构造函数只有一个参数,而且该参数又不是本类的const引用时,这种构造函数称为转换构造函数。试验了一下

    class A
    {
    public:
        int a;
        A(int a) :a(a) {}
        A reta()
        {
            return a;
        }
    };
    int main()
    {
        A a(2);
        A b = a.reta();
        A c = 3;
        cout<<b.a<<"
    "<<c.a<<endl;
        return 0;
    }

     结果是输出2和3

    实际上这是由隐式转换机制造成的,如果不想要这种效果,可以在构造函数前加上explicit声明。加上之后上面的代码就会编译出错,提示

    无法从“int”转换为“A”。

    既然能将数据转换为类型,类型也能转换为数据。c++的类型转换函数可以将一个类的对象转换为一个指定类型的数据。

    类型转换函数的一般形式为 :
    operator 类型名()
    {实现转换的语句}
    测试代码:
     
    class A
    {
    public:
        int a;
        A(int a) :a(a) {}
        operator int()
        {
            return a;
        }
    };
    int main()
    {
        A a(2);
        int b = a + 3;
        A c = a + 4;
        cout<<b<<"
    "<<c.a<<endl;
        return 0;
    }

    结果输出5和6

  • 相关阅读:
    PHP生成名片、网址二维码
    利用google api生成二维码名片
    PHP实现视频文件上传完整实例
    delphi程序中定义热键
    如何制作手机自适应网页
    取MAC地址 (含多网卡),最好的方法,支持Vista,Win7
    PHP压缩与解压Zip(PHPZip类)
    如何在mysql中存储音乐和图片文件
    viewFlipper 之二
    ViewFlipper
  • 原文地址:https://www.cnblogs.com/tonychen-tobeTopCoder/p/5178624.html
Copyright © 2011-2022 走看看