类的自动类型转换和强制类型转换

本文介绍了C++中如何通过构造函数实现基本类型到类类型的转换,并通过explicit关键字控制隐式转换;同时,还讲解了如何定义转换函数来实现类到其他类型的转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.可以将类定义成与基本类型或者另一个类相关,使得从一个类转换成另外一个类型是有意义的。

2.将基本类型转换成类(下面以double转换成Money类来举例):

假设定义了如下类:

class Money
{
    private:
        double RMB;
        double DOLLAR;
    public:
        Money();
        Money(double r, double d);
        Money(double r);
        ~Money();

        friend ostream & operator<<(ostream & os, Money & m);
};
则其中的构造函数
Money(double r);
可以讲double类型转换成Money类这个类型。

●只有接受一个参数的构造函数才能作为转换函数

●或者有多个参数,但是除第一个参数没有默认值外,其他所有的参数都有默认值,这样的构造函数也可作为转换函数

●在正常情况下,以下代码是有效的:

Money m;
m = 12.3;
这种转换成为隐式转换。

●隐式转换有时候会导致意外的类型转换,所以我们有时需要关闭隐式转换,这时我们使用关键字explicit:

explicit Money(double r);
使用了关键字explicit后,则代码:

Money m;
m = 12.3;
是无效的,只能使用如下方式将double类型转换成Money类:

Money m(12.3);//或者类似初始化方式

3.类转换为其他类型:

●构造函数只能用于从某种类型到类类型的转换。要进行相反的转换,必须使用特殊的c++运算符函数---转换函数
●注意一下几点:

   ①转换函数必须是类的方法

   ②转换函数不能指定返回类型

   ③转换函数不能有参数

●转换函数举例:

假设有如下类定义:

class Money
{
    private:
        double RMB;
        double DOLLAR;
    public:
        Money();
        Money(double r, double d);
        Money(double r);
        ~Money();
        operator double();  //转换函数,用于将Money类转换成double类型

        friend ostream & operator<<(ostream & os, Money & m);
};
其中的

operator double();  //转换函数,用于将Money类转换成double类型
就是我们定义的转换函数,定义方法是operator typeName()

转换函数的使用:

int main()
{
    Money m(2.3);
    double result;
    result = m;
    cout << m;
    cout << result;
    return 0;
}
这样就可以将类转换成double。上例中也可以在result前加上(int)转换成整数类型。










Java 中的数据型可以分为两:基本数据引用数据型。基本数据型包括 boolean、byte、short、int、long、float double,而引用数据型包括、接口、数组等。 Java 中的自动类型转换(隐式类型转换)是指在表达式中将一种数据型的值自动转换成另一种数据型的值。自动类型转换是从小型到大型的转换,例如 byte 型可以自动转换为 short、int、long、float 或 double 型,int 型可以自动转换为 long、float 或 double 型,等等。Java 中的自动类型转换是安全的,因为它不会导致数据的精度损失。 Java 中的强制类型转换(显式类型转换)是指将一种数据型的值强制转换成另一种数据型的值。强制类型转换必须显式地进行,因为它可能导致数据的精度损失或溢出。强制类型转换的语法格式如下: ``` (目标型) 值 ``` 其中,目标型是要转换成的数据型,值是要转换的值。需要注意的是,强制类型转换可能会导致数据的精度损失或溢出,因此在进行强制类型转换时要谨慎,避免数据的精度损失溢出。 例如,将一个 double 型的值强制转换成 int 型的值可以使用以下语句: ``` double d = 3.14159; int i = (int) d; ``` 在这个例子中,d 是一个 double 型的值,它被强制转换成了 int 型的值,i 的值为 3。需要注意的是,强制类型转换可能会导致精度损失,因此在进行强制类型转换时要注意数据的精度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值