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

题目

基础知识要牢固。。。

================================================


类的自动类型转换和强制类型转换,有需要的朋友可以参考下。


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)转换成整数类型。


======================================

#include <iostream>
#include <string>
using namespace std;


class A
{
    int n;
public:
// 在此处补充你的代码
    A(int n_):n(n_) {}
    A() {}

    A & operator ++()
    {
        n++;
        return *this;
    }
    int  operator ++ (int)
    {
        int tem;
        tem = n;
        n++;
        return tem;
    }
    void  operator = ( int n_)
    {
        n = n_;
    }
    operator int()
    {
        return n;
    }

    friend ostream &  operator << (ostream &os,A a)
    {
        os<<a.n;
        return os;
    }

};

class B
{
private:
    static int k;
    static int Square(int n)
    {
        cout <<  "k=" << k <<endl;
        return n * n;
    }
    friend int main();
};
int B::k;

int main()
{
    A a1(1),a2(2);
    cout << a1++ << endl;
    (++a1) = 100;
    //a1 = 100;
    cout << a1 << endl;
    cout << ++ a1 << endl;
    cout << a1 << endl;
    int n;
    cin >> n;
    while( n --)
    {
        cin >> B::k;
        A a3(B::k);
        cout << B::Square(a3) << endl;
    }
    return 0;
}



参考 C++ 构造转换函数和强制转换函数

 

C++转换构造函数和隐式转换函数

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、付费专栏及课程。

余额充值