C++模块与泛型编程

学习侯捷老师,C++模板与泛型编程总结

Conversion function 转化函数

class Fraction
{
public:
    Fraction(int num,int den=1)
    :m_numerator(num),m_denominator(den){}
    
    //转化函数可以加认为可以转化的所有函数,string ....
    operator double()const{
    return (double)(m_numerator/m_denominator);
    }
private:
    int m_numerator; //分子
    int m_denominator;//分母
}



//使用、
Fraction f(3,4);
double d=f+4;
//编译器行为
//首先编译器会去找有么有 浮点数或者整数 + Fraction 类型的操作行为,没有,编译器再去寻找有没有f转为为double类型的操作, 选择使用operator double()const 函数

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;//分母
}



//使用、将4通过构造函数一个实参转为为Fraction 再调用operator+ 
Fraction f(3,4);
double d=f+4;
//编译器行为
//首先编译器会去找有么有 浮点数或者整数 + Fraction 类型的操作行为,分数+  与设计模式不同, 编译器再选择是否可以将4 转化为Fraction  ,在调用operator+(cosnt Fraction &f)
class Fraction
{
public:
    Fraction(int num,int den=1)
    :m_numerator(num),m_denominator(den){}
   
    //转化函数可以加认为可以转化的所有函数,string ....
    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,4);
Fraction  d=f+4;
//编译器行为
//首先编译器会去找有么有 浮点数或者整数 + Fraction 类型的操作行为,有,编译器再去寻找有没有f转为为double类型的操作, 选择使用operator double()const 函数 编译器报错 二义性

explicit-one-argument ctor

class Fraction
{
public:
    explict Fraction(int num,int den=1)
    :m_numerator(num),m_denominator(den){}
   
    //转化函数可以加认为可以转化的所有函数,string ....
    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,4);
Fraction  d=f+4;
//编译器行为
//首先编译器会去找有么有 浮点数或者整数 + Fraction 类型的操作行为,失败 4转为为faction不允许,因为explict 
,编译器再去寻找有没有f转为为double类型的操作, 选择使用operator double()const 函数 编

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值