在学习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++,所学不深,所以问得比较幼稚,望大家不吝指教……
展开
 我来答
不KE爱
2009-06-12 · 超过54用户采纳过TA的回答
知道答主
回答量:178
采纳率:0%
帮助的人:150万
展开全部
我没有明白

intModulus() 只是一个函数
她怎么运用重载的%的有很多方法.
完全可以在函数里 return val1%val2 这不运用了重载的%了么..
第二个也是这样的问题

如果此时的_val=0 return _val==0 成立 .那么就返回true

也就是:

当_val不为0的时候 !_val=false
当_val为0的时候 !false=true

0也就是false

是这样理解么
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式