42-类型转换函数(下)

注:博客中内容主要来自《狄泰软件学院》,博客仅当私人笔记使用。

测试环境:Ubuntu 10.10

GCC版本:9.2.0

 

一、问题

        类类型是否能够类型转换到普通类型

 

二、类型转换函数

1)C++类中可以定义类型转换函数

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

3)语法规则:

operator Type()
{
    Type ret;
    //...
    return ret;
}

 

编程实验
类型转换函数初探
42-1.cpp
#include <iostream>
#include <string>

using namespace std;

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

    int value()
    {
        return mValue;
    }

    operator int ()  //类型转换函数
    {
        return mValue;
    }
};

int main()
{   
    Test t(100);
    int i = t;   //等价于t.operator int(),t返回100  
    
    cout << "t.value() = " << t.value() << endl;
    cout << "i = " << i << endl;
    
    return 0;
}

操作:

1) g++ 42-1.cpp -o 42-1.out编译正确,打印结果:

t.value() = 100
i = 100

 

三、类型转换函数

1)类型转换函数

    -    与转换构造函数具有同等的地位

    -    使得编译器有能力将对象转化为其它类型

    -    编译器能够隐式的使用类型转换函数

 

2)编译器会尽力尝试让源码通过编译

\

 

3)类型转换函数

                类类型之间的相互转换?!类型转换函数 vs 转换构造函数 

编程实验
类类型之间的转换
42-2.cpp
#include <iostream>
#include <string>

using namespace std;

class Test;

class Value
{
public:
    Value()
    {
    }
    
    explicit Value(Test& t)   //转换构造函数    explicit禁止编译器隐式类型转换
    {
    }
};

class Test
{
    int mValue;
public:
    Test(int i = 0)
    {
        mValue = i;
    }
    int value()
    {
        return mValue;
    }
    operator Value()   //类类型转换函数
    {
        Value ret;
        cout << "operator Value()" << endl;
        return ret;
    }
    /*
    Value toValue()  //公有成员代替类型转换函数。和上边效果一致
    {
        Value ret;
        cout << "operator Value()" << end;
        return ret;
    }
    */
};

int main()
{   
    Test t(100);
    Value v = t;   //等价于t.operator Value();
         //1、如果定义转换构造函数,注释转换构造函数,上一行代码也可以,等价Value(t)
         //2、如果转换构造函数和类类型转换函数都存在,可能会发生冲突,报错
    return 0;
}

操作:

1) g++ 42-2.cpp - o 42-2.out编译正常,打印结果:

operator Value()

分析:

        执行Value v = t;时t被编译器隐式转换成t.operaotr Value()(调用了类型转换函数)。

 

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

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

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

 

#include <QDebug>
#include <QString>

int main()
{
    QString str = "";
    int i = 0;
    double d = 0;
    short s = 0;

    str = "-255";
    i = str.toInt();
    d = str.toDouble();
    s = str.toShort();

    qDebug() << "i = " << i << endl;
    qDebug() << "d = " << d << endl;
    qDebug() << "s = " << s << endl;

    return 0;
}

打印结果:
 

i = -255
d = -255
s = -255

 

小结

1)C++类中可以定义类型转换函数

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值