C++------类的类型转换

C++的类类型转换中有本身类型向其他类型的转换,也有其他类型向本身类型的转换。转换的方法如下图所示。

类类型转换运算符实现本类向其他类的转换,转换构造函数实现其他类向本类的隐式转换。 

下面以复数Fraction类为本类,以double类为他类为例。

类类型转换运算符

类类型转换运算符没有返回类型,没有参数,且通常定义为const。

#include <iostream>
using namespace std;
class Fraction{
public:  
    Fraction(int num, int den = 1): numerator(num), denominator(den) {}
    //定义向其他类(double)转换的类类型转换运算符
    operator double() const {
        return (double) (numerator / denominator);
    }    
private:
    int numerator; //分子
    int denominator;//分母
};

int main(){
    Fraction f(3, 5);
    //编译器看Fraction类是否对+操作符进行重载
    //没有,看Fraction类是否定义了向double类型的转换
    double d = 4 + f; //f转换为double类型的0
    cout << d << endl; 
    return 0;
}

 转换构造函数

如果构造函数只接受一个实参,且没有explicit关键字限定,则是转换构造函数。

#include <iostream>
using namespace std;

class Fraction{
public:  
    //此构造函数可以只传递一个实参,且无explicit限定,即为转换构造函数
    Fraction(int num, int den = 1): numerator(num), denominator(den) {}
    Fraction operator+(const Fraction &f){
        return Fraction(numerator*f.denominator + denominator*f.numerator, denominator*f.denominator);
    }  
private:
    int numerator; //分子
    int denominator;//分母
};
int main(){
    Fraction f(3, 5);
    Fraction d = f + 4;  //4会调用转换构造函数转换为Fractio(4,1)
    return 0;
}

 

 当类同时定义了类类型转换运算符和转换构造函数时,会发生二义性错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值