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;
}