美文网首页
勿在浮沙筑高台--P15-16

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

作者: Catherin_gao | 来源:发表于2021-07-26 19:59 被阅读0次
  • 反向编程和面向对象编程
  • 继承关系中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
}

相关文章

网友评论

      本文标题:勿在浮沙筑高台--P15-16

      本文链接:https://www.haomeiwen.com/subject/oltrtltx.html