实现简单的 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,到这里我们的目的就达到了!
其实在我做的程序里很少用到这些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,到这里我们的目的就达到了!
相关文章推荐
- 实现简单的 std::cout
- 一个简单std::cout 引出的学习
- std::hash实现太简单分布不匀
- javascript封装简单实现方法
- jsp连接oracle数据库并实现简单登录功能,来自网络,部分修改。(亚信联创实习)
- JavaScript实现简单的购物车
- 条款35:通过mismatch或lexicographical比较实现简单的大小写无关字符串比较
- c#实现为程序绑定电脑简单实现方法
- 网络编程(学习整理)---1--(Tcp)实现简单的控制台聊天室
- 一个简单的用javascript实现的页面内容过滤显示小程序源码
- CString实现原理简单介绍
- Kafka 简单实验二(Python实现简单生产者消费者)
- 顺序表的简单实现
- JS简单实现登陆验证附效果图
- 简单实现C#生成Excel 2007文件并下载
- 安卓第十天——ListView的简单实现
- 使用Requests+xpath实现简单的数据爬取
- CCNP课堂练习三:vlan简单介绍及通过单交换机实现不同vlan间通讯
- 二叉堆的简单实现
- Android高级控件(四)——VideoView 实现引导页播放视频欢迎效果,超级简单却十分的炫酷