第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;
    }
posted @ 2019-11-26 11:08  人民广场的二道贩子  阅读(131)  评论(0编辑  收藏  举报