在学习C++primer时遇到的问题,不能理解,请教大家了…….
C++primer第三版12.3.1预定义函数对象:P483页classInt{public:Int(intival=0):_val(ival){}intoperator...
C++primer第三版12.3.1预定义函数对象:P483页
class Int
{
public:
Int(int ival=0):_val(ival){}
int operator-() {return -_val;}
int operator%(int ival){return _val%ival;} ①
bool operator<(int ival){return _val<ival;} ②
bool operator!() {return _val==0;} ③
private:
int _val;
};
其他无关的若干声明……..
int ival1,ival2,ires;
Int Ival1,Ival2,Ires;
定义的两个函数模板,我们向其传递各种没有名字的函数对象。
template <class Funcobject,class Type>
Type UnaryFunc(Funcobject fob,const Type &val)
{return fob(val);}
template <class Funcobject,class Type>
Type BinaryFunc(Funcobject fob,const Type &val1, const Type &val2)
{return fob(val, val2);}
12.3.2算术函数对象P484页
求余:modulus<Type>
modulue<Int> IntModulus;
Ires=IntModulus(Ival1,Ival2); ④
ires=BinaryFunc(modulue<int>(),ival2,ival1);
取反:negate<Type>
negate<int> intNegate;
ires=intNegate(ires);
Ires=UnaryFunc(negate<Int>(),Ival1); ⑤
小于:less<Type>
less<Int> IntLess;
Ires=IntLess(Ival1,Ival2); ⑥
ires=count_if(svec.begin(),svec.end(),less<string>(),sval1);
问:
1、见①;类Int重载%运算符的参数是int型,也就是说,只有碰到Int(对象)%int(对象)才会被重载。而④Ires=IntModulus(Ival1,Ival2)传递的是两个Int类类型,不知到IntModulus是怎么运用Int重载的%运算符的?
2、同上,见②;类Int重载<运算符的参数是int型,也就是说,只有碰到Int(对象)<int(对象)才会被重载。而⑥Ires=IntLess(Ival1,Ival2); 传递的是两个Int类类型,不知到IntLess是怎么运用Int重载的<运算符的?
3、见③,如果Int不为0,即_val不为0,取反怎为0,所以return _val==0很好理解,但如果Int初始化为0,即_val初始化为0,那么Int取反应该怎样返回?见⑤.
小弟初学c++,所学不深,所以问得比较幼稚,望大家不吝指教…… 展开
class Int
{
public:
Int(int ival=0):_val(ival){}
int operator-() {return -_val;}
int operator%(int ival){return _val%ival;} ①
bool operator<(int ival){return _val<ival;} ②
bool operator!() {return _val==0;} ③
private:
int _val;
};
其他无关的若干声明……..
int ival1,ival2,ires;
Int Ival1,Ival2,Ires;
定义的两个函数模板,我们向其传递各种没有名字的函数对象。
template <class Funcobject,class Type>
Type UnaryFunc(Funcobject fob,const Type &val)
{return fob(val);}
template <class Funcobject,class Type>
Type BinaryFunc(Funcobject fob,const Type &val1, const Type &val2)
{return fob(val, val2);}
12.3.2算术函数对象P484页
求余:modulus<Type>
modulue<Int> IntModulus;
Ires=IntModulus(Ival1,Ival2); ④
ires=BinaryFunc(modulue<int>(),ival2,ival1);
取反:negate<Type>
negate<int> intNegate;
ires=intNegate(ires);
Ires=UnaryFunc(negate<Int>(),Ival1); ⑤
小于:less<Type>
less<Int> IntLess;
Ires=IntLess(Ival1,Ival2); ⑥
ires=count_if(svec.begin(),svec.end(),less<string>(),sval1);
问:
1、见①;类Int重载%运算符的参数是int型,也就是说,只有碰到Int(对象)%int(对象)才会被重载。而④Ires=IntModulus(Ival1,Ival2)传递的是两个Int类类型,不知到IntModulus是怎么运用Int重载的%运算符的?
2、同上,见②;类Int重载<运算符的参数是int型,也就是说,只有碰到Int(对象)<int(对象)才会被重载。而⑥Ires=IntLess(Ival1,Ival2); 传递的是两个Int类类型,不知到IntLess是怎么运用Int重载的<运算符的?
3、见③,如果Int不为0,即_val不为0,取反怎为0,所以return _val==0很好理解,但如果Int初始化为0,即_val初始化为0,那么Int取反应该怎样返回?见⑤.
小弟初学c++,所学不深,所以问得比较幼稚,望大家不吝指教…… 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询