记得有一次技术笔试题,其中有一道题是实现cout,因为我是c程序员,那时脑海中也没有思路,这道题没做。事后也没有去研究一下实现,因为不想转战c++。最近发觉c++使用的也挺广泛,毕竟面向对象的一些特性和思想确实能让系统的架构变得更灵活,所以趁项目空档期,结合《c++ primer》,TFS源码,和自己的实际,学习加强一下c++的知识,记录在此只供个人复习,本人c++初级菜鸟,实在不敢献丑。
下面是一个简单模拟cout输出整数和字符串的实现。
#include
#include
using namespace std;
class OutputStream
{
public:
OutputStream(){}
~OutputStream(){}
const OutputStream& operator<<(int value) const;
const OutputStream& operator<<(char *value) const;
};
const OutputStream& OutputStream::operator<<(int value) const
{
printf("%d", value);
return *this;
}
const OutputStream& OutputStream::operator<<(char *value) const
{
printf("%s", value);
return *this;
}
OutputStream outputStream;
int main(void)
{
char str[] = "HelloWorld\n";
outputStream << str;
return 0;
}
总结:
1.cout是ostream的一个实例,通过运算符重载来实现各种数据类型的输出。
2.这里没有实现endl,也就是换行,查阅资料发现endl其实是个函数。
stl中endl实现:
template
inline basic_ostream<_CharT, _Traits>& endl(basic_ostream<_CharT, _Traits>& __os)
{
return flush(__os.put(__os.widen('\n')));
}
__ostream_type& operator<<(__ostream_type& (*__pf)(__ostream_type&))
{
return __pf(*this);
}
阅读(3499) | 评论(0) | 转发(0) |