下面是一个简单模拟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);
}