重载流插入和流提取运算符

C++的流提取运算符>>和流插入运算符<<能用来输入输出标准类型的数据。这两个运算符是C++编译器在类库中提供的,可以处理包括字符串和内存地址在内的每个标准数据类型。如果我们为自定义类型(C++类)重载这两个运算符,那么他们就也能输入输出该自定义类型。

 

如下是一个简单的例子,用来处理用户自定义的电话号码类PhoneNumber的数据,源码如下:

类文件:PhoneNumber.h

  1. #ifndef PHONENUMBER_H
  2. #define PHONENUMBER_H
  3. #include <iostream>
  4. using namespace std;
  5. //Calling any one of the potentially unsafe methods such as 'readsome' in the Standard C++ Library 
  6. //will result in Compiler Warning (level 1) C4996.
  7. #pragma warning(disable:4996)
  8. class PhoneNumber
  9. {
  10. public:
  11.     PhoneNumber();
  12.     friend ostream &operator<<(ostream &output, const PhoneNumber &num);
  13.     friend istream &operator>>(istream& input, PhoneNumber &num);
  14. private:
  15.     char areaCode[4];           //3位数字的区号或为空
  16.     char exchange[4];           //3位数字的电话局号或为空
  17.     char line[5];               //4位数字的线路号或为空
  18. };
  19. PhoneNumber::PhoneNumber()
  20. {
  21.     memset(areaCode, 0, sizeof(areaCode));
  22.     memset(exchange, 0, sizeof(exchange));
  23.     memset(line, 0, sizeof(line));
  24. }
  25. ostream &operator<<(ostream& output, const PhoneNumber &num)
  26. {
  27.     output<<"("<<num.areaCode<<")"<<num.exchange<<"-"<<num.line;
  28.     
  29.     //使得能连续执行cout<<a<<b<<c;
  30.     return output;
  31. }
  32. istream &operator>>(istream& input, PhoneNumber &num)
  33. {
  34.     input.ignore();                                             //跳过(
  35.     input.readsome(num.areaCode, sizeof(num.areaCode)-1);       //输入区号
  36.     input.ignore();                                             //跳过)
  37.     input.readsome(num.exchange, sizeof(num.exchange)-1);       //输入电话局号
  38.     input.ignore();                                             //跳过连字符-
  39.     input.readsome(num.line, sizeof(num.line)-1);               //输入线路号
  40.     //使得能连续执行cin>>a>>b>>c;
  41.     return input;
  42. }
  43. #endif

主程序文件:Main.h

  1. #include "PhoneNumber.h"
  2. int main()
  3. {
  4.     cout<<"--------------------------------------------------------------------/n";
  5.     cout<<"              重载流插入和流提取运算符演示程序                      /n";
  6.     cout<<"  by Loomman, QQ:28077188, MSN: [email protected] QQ裙:30515563  /n";
  7.     cout<<"--------------------------------------------------------------------/n/n";
  8.     PhoneNumber phone;
  9.     cout<<"Enter a phone number in the form (123)456-789: /n";
  10.     cin>>phone;
  11.     cout<<"The phone number entered was: /n"<<phone<<endl;
  12.     int a;
  13.     cin>>a;
  14.     return a;
  15. }

运行结果如下:

--------------------------------------------------------------------
              重载流插入和流提取运算符演示程序
  by Loomman, QQ:28077188, MSN: [email protected] QQ裙:30515563
--------------------------------------------------------------------

Enter a phone number in the form (123)456-789:
(111)222-333
The phone number entered was:
(111)222-333
by Loomman, QQ:28077188, MSN: [email protected] QQ裙:30515563 ☆程序天堂☆ 请尊重作者原创,转载注明来自裂帛一剑博客,谢谢合作。

 

你可能感兴趣的:(qq,library,Exchange,编译器,电话,output)