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

本文介绍了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)转换成整数类型。










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值