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

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

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

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

eg:

include

include

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  人民广场的二道贩子  阅读(140)  评论(0)    收藏  举报