复习之模拟cout<<setw()
#include "stdafx.h"#include <iostream>
using namespace std;
typedef void (*PFUN)(ostream& o,int);
class MyCoutSetWidth
{
private:
PFUN pfun;
int width;
public:
MyCoutSetWidth(PFUN fun,int w):pfun(fun),width(w){}
friend ostream& operator<<(ostream& o,MyCoutSetWidth mycout);
};
ostream& operator<<(ostream& o,MyCoutSetWidth mycout)
{
mycout.pfun(o,mycout.width);
return o;
}
void _setwidth(ostream& o,int w)
{
o.width(w);// 核心在于友元中对设置宽度函数的一个调用
}
MyCoutSetWidth setwidth(int w)
{
return MyCoutSetWidth(_setwidth,w);
}
int main(int argc, char* argv[])
{
cout<<setwidth(4)<<12<<endl;
return 0;
} 如果我们去实现这样一个输出:cout<<setwidth(4)
首先 setwidth()的返回值 要和 ostream类 重载 <<
而实现返回值和cout的重载 返回值不应该是常类型(整型、浮点型、String) 所以我们返回一个类类型 而返回类类型 就需要在 setwidth() 中创建该类的一个对象 将setwidth() 函数的参数作为该对象的构造函数的参数来传值 此时setwidth()的功能又由谁来实现呢 让该类的重载<<函数来实现 至此思路就有了 于此上面的代码也就水到渠成
PS: BS下私藏经验心得且潜水的 这点心得算不了啥 十年后再看这些东西 啥都不是 舍不得分享的东西 最终只是被氧化而已 牛人呀!
页:
[1]