勿在浮沙筑高台--P15-16

  • 反向编程和面向对象编程
  • 继承关系中this指针、虚函数

一. 转换函数 conversion function

  • 自动转换为double类型,并参与运算。
  • 不需要写return type。返回类型与函数名称相同:double
class Fraction{
public:
    Fraction(int num, int den=1)
       :m_numerator(num), m_denominator(den)
    operator double() const{
        return (double)(m_numerator/m_denominator);
    }

private:
    int m_numerator;       //分子
    int m_denominator;     //分母
};

Fraction f(3,5);
double d=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);
Fraction d2=f+4;   //调用non-explicit ctor 转为Fraction(4, 1), 然后调用operator+

三. conversion function vs. non-explicit-one-argument ctor

class Fraction{
public:
    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);
Fraction d2=f+4;   //[Error] 编译器可以使用两条路线,会冲突

四. explicit-one-argument ctor

  • 加explict关键字,明确的使用构造函数的时候,再调用构造函数
class Fraction{
public:
    explict 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);
Fraction d2=f+4;   //[Error]  conversion from 'double' to 'Fraction'

五. 转换函数的例子

  • 待补充,也是一种经典的设计模式。
template<class Alloc>
class vector<bool, Alloc>{
public:
    typedef __bit_reference
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容