自己的输出流MyOutstream怎么进行数据格式的控制呢?

elegant87 2008-11-21 10:56:36

/*自己的输出流MyOutstream怎么进行数据格式的控制呢?
想实现指定输出数据的格式,包括输出数据宽度、(二、八、十、十六)进制、浮点数的精度。
跟<iomanip>头文件中的setw(int n),setbase(int base);setprecision(int prec);函数的功能一样的!
大家帮忙看看吧!小弟学习一下!*/
#include <stdio.h>
#include <stdlib.h>

class MyOutstream
{

public:

const MyOutstream& operator<<(int value)const;//对整型变量的重载

const MyOutstream& operator<<(char*str)const;//对字符串型的重载

};

const MyOutstream& MyOutstream::operator<<(int value)const

{

printf("%d",value);

return*this;//注意这个返回……

}

const MyOutstream& MyOutstream::operator<<(char*str)const

{

printf("%s",str);

return*this;//同样,这里也留意一下……

}

MyOutstream myout;//随时随地服务的全局对象myout

int main()

{

int a=2003;
char*myStr="Hello,World!";
myout<<a<<"\n";
myout<<myStr;
system("pause");
return 0;

}
...全文
128 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hityct1 2008-11-22
  • 打赏
  • 举报
回复
不懂,mark
elegant87 2008-11-22
  • 打赏
  • 举报
回复
输出宽度怎么控制呢?
我想写个成员函数width(int n),来实现,
怎么实现呢?
还有精度,我写一个setprecision(int n)函数
怎么实现呢?
星羽 2008-11-22
  • 打赏
  • 举报
回复
随便弄个setbase意思一下,其实你去看看stl的实现最好





#include <stdio.h>
#include <stdlib.h>

class setbase;

class MyOutstream
{


public:
MyOutstream() : base(10) {}
const MyOutstream& operator<<(int value)const;//对整型变量的重载
const MyOutstream& operator<<(char*str)const;//对字符串型的重载

const MyOutstream& operator<<(setbase& s);

int base;

};

class setbase
{
public :
setbase(int base) : _base(base)
{
}

void fun(MyOutstream& stream) { stream.base = _base; };
int _base;
};


const MyOutstream& MyOutstream::operator <<(setbase& s)
{
s.fun(*this);
return *this;
}


const MyOutstream& MyOutstream::operator<<(int value)const

{


char str[32];
printf("%s",itoa(value, str, base));

return*this;//注意这个返回……

}

const MyOutstream& MyOutstream::operator<<(char*str)const

{

printf("%s",str);

return*this;//同样,这里也留意一下……

}

MyOutstream myout;//随时随地服务的全局对象myout


int main()

{

int a=2003;
char*myStr="Hello,World!";
myout<<a<<"\n";
myout<<setbase(2)<<a<<"\n";
myout<<setbase(8)<<a<<"\n";

myout<<myStr;
system("pause");
return 0;

}





2003
11111010011
3723
Hello,World!请按任意键继续. . .






星羽 2008-11-22
  • 打赏
  • 举报
回复
看看stl的实现吧
wuyu637 2008-11-21
  • 打赏
  • 举报
回复
C++流的格式化没有C语言简便,C语言的输入输出函数可以直接进行格式控制,而C++中需要用到IO对象的成员函数和操纵元来进行格式控制。
setf格式化标志
outstream.setf(……);
ios::fixed //不用e计数法
ios::scientific //用e计数法
ios::showpoint //始终为浮点数显示小数点和尾随的0
ios::showpos //正整数前输出一个正号
ios::right //右对齐-默认
ios::left //左对齐
cout.width(4); //指定输出的域宽,仅最近一次有效
cout<<setw(4)<<202; //域宽,仅最近一次有效 <iomanip>
cout.precision(2); //总数位,一直生效直到重设
cout<<setprecision(2); //总数位,一直生效直到重设<iomanip>
cout.setf(ios::fixed);
cout<<setprecision(2)<<a;//结合setf控制小数位数,不足补0;

=============================================
这些是c++标准输出流的控制方式,如果你要实现你自己的输出流的控制方式,可以考虑也使用这样的控制方式,用一些变量或者输出流的
控制函数改变输出流的格式

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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