Conversion function转换函数
- 转为其他类型
class Fraction
{
public:
Fraction(int num, int den = 1)
: m_numerator(num), m_denominator(den) {
}
// 转换函数,没有return type
operator double() const{
// 转换函数
return (double) (m_numerator / m_denominator);
}
private:
int m_numerator; // 分子
int m_denominator; // 分母
};
Fraction f(3, 5);
double ans = 4 + f; // 调用operator double()将f转换为double
non-explicit-one-argument ctor
- 转为对应的类对象
class Fraction
{
public:
Fraction(int num, int den = 1)
: m_numerator(num), m_denominator(den) {
}
Fraction operator+(const Fraction& f){
return Fraction(...);
}
private:
int m_numerator; // 分子
int m_denominator; // 分母
};
Fraction f(3, 5);
double ans = f + 4; // 调用non-explicit ctor将4转为Fraction,再调用operator+
考虑代码的二义性,需用explicit(明确的)关键字,一般用于构造函数前,或模版
explicit关键字的作用就是防止类构造函数的隐式自动转换
加上关键字explicit后,不允许再隐式转换
class Fraction
{
public:
explicit Fraction(int num, int den = 1)
: m_numerator(num), m_denominator(den) {
}
operator double() const{
// 转换函数
return (double) (m_numerator / m_denominator);
}
Fraction operator+(const Fraction& f){
return Fraction(...);
}
private:
int m_numerator; // 分子
int m_denominator; // 分母
};
Fraction f(3, 5);
double ans = f + 4