看书时看不懂

Cform 2005-05-16 02:05:04
21.4.6.1带参数的操控符
cout<< setprecision(4)<<angle,要不用4位angle为完成此事setprecison必须
返回一个用4初始化过的对象。在它被子调用时就能去调用cout。precision(4)。
这样的操控符是一个函数对象,它们被子<<(而不是通过()调用),
这个函数对象有可能象下历这样定义。
struct smanip{
ios_base& (*f)(ios_base&,int),int);//要调用的函数
int i,
smanip (ios_bse& (*ff)(ios_base&,int),(int)):f(ff),i(ii){}
};
template<class Ch, class Tr>
ostream<Ch,Tr> & operator<<(ostream<Ch,Tr>&os,const smanip& m)
{
return m.f(os,m.i);
}


smanip 的构造函数将存在于f和i中,operator<<调用f(i),现在我们就可以用
以下方式定义setprecision()了,
ios_base& set_precision(ios_base& s,int n)//协会助函数
{return s.precision(n);//调用成员函数}
inline smanip setprecison(int n)
{return smanip(set_precison,n)//创建函数对象
我们现在就可以写cout<<setprecison(4)<<angle了。


我不太明白当setprecison(4)被调用时,4传给了smanip中的构造函数,
可是,不知道是怎么传给了(*ff)(ios_base&,int)里的int??
另外,是不是调用smanip时,这会从非const转为const?
...全文
382 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
songjuan10 2005-07-08
  • 打赏
  • 举报
回复
努力吧!
kyokyxxj 2005-06-05
  • 打赏
  • 举报
回复
看不懂。。帮你顶下
zhousqy 2005-06-05
  • 打赏
  • 举报
回复
mark
Cform 2005-06-05
  • 打赏
  • 举报
回复
那么
ostream <Ch,Tr > & operator < <(ostream <Ch,Tr >&os,const smanip& m)
{
return m.f(os,m.i);
}
是不是在参数smanip &m时会构造该类
zjlang 2005-05-18
  • 打赏
  • 举报
回复
UP
jingyueid 2005-05-17
  • 打赏
  • 举报
回复
cout<<setprecison(4)<<angle
在执行的时候。<<被解析为:
ostream<Ch,Tr> & operator<<(ostream<Ch,Tr>&os,const smanip& m)
{
return m.f(os,m.i);
}

执行return m.f(os, m.i)操作;

smanip首先给构造为:
smanip (ios_bse& (*ff)(ios_base&,int),(int)):f(ff),i(ii){}
注意,那个整数传给了i,函数指针给了f。

smanip被传参进来后,执行代码:
m.f(os, m.i),就是在执行:set_precison(os, m.i)
fibbery 2005-05-16
  • 打赏
  • 举报
回复
是C++

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧