您的位置:首页 > 其它

实现简单的 std::cout

2006-03-28 21:08 176 查看
实现简单的 std::cout
其实在我做的程序里很少用到这些IO操作的东西,但是最近在培训班里要弄比赛,所以也就趁这个机会去学习一下C++里的IO操作。看了点书,有了点心得,遂决定自己来做这件有点本质的东西。
cout 是类 ostream 的一个实例。而cin 是类 istream的一个实例。(cin 原理同cout 一致,所以此文不必论述)
类似于 cout << .. 的操作其实是一个已知的数据(或对象)通过 “<<” 这个被重载了的运算符和 cout 对象发生作用。
新的C++标准里,cout 被放在了一个名字空间里,而这个名字空间被放在 iostream 这个文件里,它叫 std !
于是,如果你要使用 std 这个对象,那你就必须从名字空间 std 里去获得它。从一个名字空间里去获得一个对象的使用可以这样做:
1: using namespace std; 然后就可以使用名字空间 std 里的所有东西。
2: using std::cout; 然后就可以使用 std 里的 cout
3:在要使用 cout 的时候直接 std::cout ….

我们要实现的这个简单的 std::cout 应该能有这样的操作 :cout << “My std::cout” ; 仅仅是让它输出一个字符串。在理解了以上的那些信息后,我们可以轻易地实现。
实现步骤:首先,为了实现输出操作,我们必须使用一个比较底层的东西,例如C语言里的 printf . 然后我们还需要定义一个名为 std 的名字空间,在这个名字空间里得有个简单的类 ostream ,当然,为了实现看上的 cout << “….” ,我们还需要重载 “<<” 运算符。最后,当然就是在 std 名字空间里实例化一个 ostream 的名为 cout 的对象。
其实在理解了 cout 的本质后,这些实现一点也不难。
见下面代码:
//MyCout.h
//================================================================
// 实现一个简单的std::cout
// Kevin Lynx 2006.3.28
//================================================================
#ifndef MYCOUT_H
#define MYCOUT_H

#include <stdio.h> //我们需要使用C语言里的IO操作函数来实现底层的IO操作

namespace std //定义一个名为 std 的名字空间
{

class ostream //一个简单的ostream类
{

public:
void operator << (char *msg) //自己重载 << 运算符
{
printf("%s",msg); //调用printf函数实现IO输出
}

};

ostream cout; //实例化一个名为 cout 的对象

}

#endif

//test.cpp
//===============================================================
// 测试一下这个简易的std::cout
// Kevin Lynx 2006.3.28
//===============================================================
#include "MyCout.h"

//using std::cout; //第一种方法
//using namespace std; //第二种方法

int main()
{

//cout << "My std::cout" ; //配合第一,二种方法使用
std::cout << "My std::cout" ; //第三种方法

return 0;
}

OK,到这里我们的目的就达到了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: