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反射机制
    Composer教程之常用命令
    Composer教程之基础用法
    Composer教程之初识Composer
    Composer 的结构详解
    现代 PHP 新特性系列(七) —— 内置的 HTTP 服务器
    现代 PHP 新特性系列(一) —— 命名空间
    现代 PHP 新特性系列(二) —— 善用接口
    现代 PHP 新特性系列(三) —— Trait 概览
    现代 PHP 新特性系列(四) —— 生成器的创建和使用
  • 原文地址:https://www.cnblogs.com/huangdengtao/p/11922588.html
Copyright © 2011-2022 走看看