zoukankan      html  css  js  c++  java
  • 第42课.类型转换函数(下)

    1.类型转换函数(类类型->普通类型)

    a.类型转换函数用于将类对象转换为其他类型
    语法规则:(重载)

    operator Type ()
    {
        Type ret;
        //...
        return ret;
    }
    

    b.类型转换函数
     1).与转换构造函数具有同等的地位
     2).是的便与其有能力将对象转化为其他类型
     3).编译器能够隐式的使用类型转换函数

    eg:

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    class Test;
    
    class Value
    {
    public:
        Value ()
        {
        
        }
        
        /*  这里定义类拷贝构造函数,是把Test拷贝为Value对象。当程序执行到下面Value v = t;语句时。
         *  程序应该选择转换构造函数还是类型转换函数呢?如果这里没有explicit这里就会报错。当然这里有
         *  explicit所以这里应该是选择类型转换函数。
         */
        explicit Value (Test& t)
        {
        
        }
    };
    
    class Test
    {
        int mValue;
    public:
        Test (int i)
        {
            mValue = i;
        }
        
        int value ()
        {
            return mValue;
        }
        
        operator int ()
        {
            return mValue;
        }
        
        operator Value ()
        {
            Value ret;
            
            return ret;
        }
    };
    
    int main()
    {
        Test t(100);
        
        Value v = t;
           
        int i = t;      //与转换构造函数到分析相同。编译器运行到这里时,发现你要将对象赋值给int类型。这显然是   
                        //行不通的。编译器便尝试隐式转换,它发现类中定义了类型转换函数,于是它便调用类型转换函数
                        //把Test对象转换为int类型赋值。
        cout << "i = " << i << endl;
    }
    

    2.类型转换函数的优化

    a.无法抑制隐式的类型转化函数调用
    b.类型转换函数可能与转换构造函数,拷贝函数冲突
    c.工程中用Type toType()公有成员变量代替类型转换函数(即不使用类型转换函数,直接定义一个函数。可以防止隐式类型转换)

        value toValue ()
        {
            Value ret;
            
            return ret;
        }
  • 相关阅读:
    奋力拼搏,永不言弃
    软件工程最终总结
    人生第一次JAVA编程,电梯(并不算完成版),以及IDEA里使用git
    尝试单元测试
    作业2的回答
    word count程序,以及困扰人的宽字符与字符
    关于未成品的问题:字符类型和其他种种
    随手一写,简单的四则运算练习
    浏览器缓存分析
    Codeforces Round #582 (Div. 3)
  • 原文地址:https://www.cnblogs.com/huangdengtao/p/11922588.html
Copyright © 2011-2022 走看看