第四十二课、类型转换函数(下)

一、类型转换函数

1、c++类中可以定义类型转换函数

2、类型转换函数用于将类对象转化为其它类型

3、语法规则:

4、类型转换函数转换构造函数具有同等的地位

5、类型转换函数使得编译器有能力将类类型转换为其它类型

6、编译器能够隐式使用类型转换函数

#include<iostream>

using namespace std;

class Test
{
private:
    int mValue;
public:
    Test(int i)
    {
        mValue = i;
    }

    int value()
    {
        return mValue;
    }

    operator int ()
    {
        return mValue;
    }
};
int main()
{
    Test t(10);
    int i = t;//编译器尽量使源码编译通过
       //t为对象类型,编译器会去寻找看有没有类型转换函数,发现operator int ()
       //所有这里相当于i = t.operator int ()
  
cout
<< "i = " << i << endl;//10 return 0; }

 

二、类类型之间的转换

#include<iostream>

using namespace std;

class Test;

class Value
{
public:
    Value()
    {}
   explicit Value(Test& t)//没有explicit关键字就会报错,编译器不知道调用哪个
    {

    }
};

class Test
{
private:
    int mValue;
public:
    Test(int i)
    {
        mValue = i;
    }

    int value()
    {
        return mValue;
    }

    operator Value ()
    {
        Value ret;
        cout << "operator Value()" << endl;
        return ret;
    }
};
int main()
{
    Test t(10);
    Value i = t;//operator Value ()
    return 0;
}

 

三、避免类型转换函数进行隐式转换

1、无法抑制隐式的类型转换函数的调用

2、类型转换函数可能与转换构造函数相冲突

3、工程中以Type toType()公有成员函数代替类型转换函数

Value toValue ()
    {
        Value ret;
        cout << "operator Value()" << endl;
        return ret;
    }

 

四、小结

1、c++可以定义类型转换函数

2、类型转换函数用于将类类型转换为其它类型

3、类型转换函数转换构造函数具有同等的地位

4、工程中以Type toType()的公有成员函数代替类型转换函数

 

posted @ 2017-02-04 13:36  lgc202  阅读(239)  评论(0编辑  收藏  举报