文章标题

C++ 第四周学习笔记(极客班)
本周是C++上的扩展学习:
conversion function ,转换函数
class Fraction
{
public:
Fraction(int num,int den=1)
:m_numerator(num),m_denominator(den){}
operator double()const{
return (double)(m_numerator/m_denominator);
}//转换函数用于将对象转换为double类型
private:
int m_numerator;//分子
int m_denominator;//分母
};
Fraction f(3,5);
double d=4+f;//调用operator double()将f转为0.6
(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_numrator;
int m_denominator;

};
Fraction f(3,5);
Fraction d2=f+4;//调用non-explicit ctor 将4转为Fraction(4,1)
//然后调用operator+
(conversion fuction vs.non-explicit-one-argument ctor)
class Fraction
{
public:
Fraction(int num,int den=1):m_numrator(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] ambiguousf+4表达式在运算式编译器会将f转换为double类型 然后和4进行运算 但是由于+运算符进行了运算符重载该操作符的参数是Fraction那么又需要进行相应的转换 此时编译器就会产生二义性了 无法确定应该调用哪个函数来执行运算。
class template,类模板
template
class complex
{
public:
complex(T r=0,T i=0):re(r),im(i){}
complex &operator+=(const complex &);
T real()const{return re;}
T imag()const{return im;}
private:
T re,im;
friend complex &_doapl(complex*,const complex&);
};
{
complexc1(2.5,1.5);、、这里通过类模板生成了两个不同的类 对象数据成员的类型一个是double 一个是int 减少了代码的重复编写
complexc2(2,6);
}
auto 可以使得编译器自动的辨别变量类型但是前提条件是必须有初值,否则会编译出错。
range_for 是C++11里面新增的,有助于便利的遍历循环如:
for(decl:coll){
statement
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值