C++笔记 第四十二课 类型转换函数(下)类类型---其他类型---狄泰学院

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_42187898/article/details/84310127

如果在阅读过程中发现有错误,望评论指正,希望大家一起学习,一起进步。
学习C++编译环境:Linux

第四十二课 类型转换函数(下)类类型—>其他类型

1.问题

类类型是否能够类型转换到普通类型?用编译器测试—可以,引入新的语法规则

2.类型转换函数

C++类中可以定义类型转换函数
类型转换函数用于将类对象转换为其他类型
语法规则:
在这里插入图片描述

42-1 类型转换函数初探

#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;
//int i = t.operator int(); //代码中是隐式类型转换
    cout << "t.value() = " << t.value() << endl;
    cout << "i = " << i << endl;
    return 0;
}
运行结果
t.value() = 100
i = 100

类型转换函数
与转换构造函数具有同等的地位
使得编译器有能力将对象转化为其他类型
编译器能够隐式的使用类型转换函数
编译器会尽力尝试让源码通过编译
在这里插入图片描述
类类型之间的相互转换?!完全可以
类型转换函数VS转换构造函数
operator Value(){} VS Value(Test& t){}
当加上explicit Value(Test& t){},错误改正

42-2 类类型之间的转换

#include <iostream>
#include <string>
using namespace std;
class Test;
class Value
{
public:
    Value()
    {
    }
    explicit Value(Test& t) //转换构造函数
    {
    }
};
class Test
{
    int mValue;
public:
    Test(int i = 0)
    {
        mValue = i;
    }
    int value()
    {
        return mValue;
    }
    operator Value()//类型转换函数 Value toValue() 工程中的解决方案
    {
        Value ret;
        cout << "operator Value()" << endl;
        return ret;
    }
};
int main()
{   
    Test t(100);
    Value v = t;
    
    return 0;
}

无法抑制隐式的类型转换函数调用
类型转换函数可能与转换构造函数冲突
工程中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;
}

小结
C++类中可以定义类型转换函数
类型转换函数用于将类对象转换为其他类型
类型转换函数与转换构造函数具有同等的地位
工程中以Type toType()的公有成员代替类型转换函数

猜你喜欢

转载自blog.csdn.net/weixin_42187898/article/details/84310127