C++中cout简单实现

3620阅读 0评论2014-12-04 cqw_cu_
分类:C/C++

记得有一次技术笔试题,其中有一道题是实现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);
}


上一篇:Nginx启动_停止_重启_状态查询脚本
下一篇:memmove和memcpy的一种简单清晰的实现