首页 > 其他 > 详细

第42课.类型转换函数(下)

时间:2019-11-26 11:52:13      阅读:80      评论:0      收藏:0      [点我收藏+]

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;
    }

第42课.类型转换函数(下)

原文:https://www.cnblogs.com/huangdengtao/p/11922588.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!