zoukankan      html  css  js  c++  java
  • 第四十二课、类型转换函数(下)

    一、类型转换函数

    1、c++类中可以定义类型转换函数

    2、类型转换函数用于将类对象转化为其它类型

    3、语法规则:

    4、类型转换函数转换构造函数具有同等的地位

    5、类型转换函数使得编译器有能力将类类型转换为其它类型

    6、编译器能够隐式使用类型转换函数

    #include<iostream>
    
    using namespace std;
    
    class Test
    {
    private:
        int mValue;
    public:
        Test(int i)
        {
            mValue = i;
        }
    
        int value()
        {
            return mValue;
        }
    
        operator int ()
        {
            return mValue;
        }
    };
    int main()
    {
        Test t(10);
        int i = t;//编译器尽量使源码编译通过
           //t为对象类型,编译器会去寻找看有没有类型转换函数,发现operator int ()
           //所有这里相当于i = t.operator int ()
      
    cout
    << "i = " << i << endl;//10 return 0; }

    二、类类型之间的转换

    #include<iostream>
    
    using namespace std;
    
    class Test;
    
    class Value
    {
    public:
        Value()
        {}
       explicit Value(Test& t)//没有explicit关键字就会报错,编译器不知道调用哪个
        {
    
        }
    };
    
    class Test
    {
    private:
        int mValue;
    public:
        Test(int i)
        {
            mValue = i;
        }
    
        int value()
        {
            return mValue;
        }
    
        operator Value ()
        {
            Value ret;
            cout << "operator Value()" << endl;
            return ret;
        }
    };
    int main()
    {
        Test t(10);
        Value i = t;//operator Value ()
        return 0;
    }

    三、避免类型转换函数进行隐式转换

    1、无法抑制隐式的类型转换函数的调用

    2、类型转换函数可能与转换构造函数相冲突

    3、工程中以Type toType()公有成员函数代替类型转换函数

    Value toValue ()
        {
            Value ret;
            cout << "operator Value()" << endl;
            return ret;
        }

    四、小结

    1、c++可以定义类型转换函数

    2、类型转换函数用于将类类型转换为其它类型

    3、类型转换函数转换构造函数具有同等的地位

    4、工程中以Type toType()的公有成员函数代替类型转换函数

  • 相关阅读:
    php Windows系统 wamp集成环境下redis的使用
    IO流文件拷贝
    IO流框架
    Map集合
    泛型
    Deque(队列)
    List接口
    Iterator接口(迭代器)
    Java中的异常详解
    Java中的正则表达式
  • 原文地址:https://www.cnblogs.com/gui-lin/p/6364739.html
Copyright © 2011-2022 走看看