Chinaunix首页 | 论坛 | 博客
  • 博客访问: 108999
  • 博文数量: 12
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 244
  • 用 户 组: 普通用户
  • 注册时间: 2014-12-02 11:07
个人简介

联系方式:825988516@qq.com 业精于勤荒于嬉 行成于思毁于随

文章分类
文章存档

2014年(12)

我的朋友

分类: C/C++

2014-12-04 14:24:35

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


阅读(3439) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~