1.静态成员类

static成员变量与函数

static成员变量:必须在类外初始化。(const或引用类型变量必须在构造函数初始化列表里初始化)

static成员函数:

不依赖于类。相当于类里的全局函数(能够由该类对象调用,也能够 类名::函数名()的形式调用)

不包括this指针。不能声明为const,声明为const表示不会改变对象。而static成员函数存在于不论什么对象之外。

相当于把訪问范围限制在所在的类中!  注意:不能訪问类中非static成员变量以及非static成员函数。

注意:尽管静态成员不属于类的某个对象。但我们仍然能够使用类的对象、引用、指针来訪问静态成员。

样例:

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. class A
  5. {
  6. public:
  7. A(int a):age(a){cout << n << endl;}
  8. void print()const
  9. {
  10. cout << "age: " << age << endl;
  11. //printN(); Right!
  12. }
  13. static void printN()
  14. {
  15. cout << "n: " << n << endl;
  16. //cout << "age: " << age << endl; Error!
  17. }
  18. private:
  19. int age;
  20. static int n;
  21. };
  22.  
  23. int A::n = 20;
  24.  
  25. int main()
  26. {
  27. A a(10);
  28. a.print();
  29. a.printN();
  30. A::printN();
  31. return 0;
  32. }

2.IO库

头文件                          类型

iostream                        istream wistream从流中读取数据

ostream wostream向流中写入数据

iostream wiostream读写流

fstream                         ifstream wifstream从文件里读取数据

ofstream wofstream向文件里写入数据

fstream wfstream读写文件

sstream                       istringstream wistringstream 从string读取数据

ostringstream wostringstream向string写入数据

stringstream wstringstream 读写string

详细见例如以下关系图

缓冲区:

每一个输出流都管理一个缓冲区,用来保存读写的数据。导致缓冲区的刷新原因:

  • 程序正常结束,作为main函数的return操作的一部分,缓冲被刷新
  • 缓冲区满,刷新缓冲区
  • 操作符endl能够用来显示的刷新缓冲区
  • 默认情况下,写到ceer的内容都是马上刷新的
  • 一个输出流可能被关联到还有一个流。此时缓冲区会被刷新
除了endl,还有flush、ends两个操作符能够刷新缓冲区,例如以下所看到的:
  1. cout << "scott" << endl;//输出scott和一个换行符。然后刷新缓冲区
  2. cout << "scott" << flush;//输出scott 然后刷新缓冲区
  3. cout << "scott" << ends;//输出scott和一个空字符 然后刷新缓冲区

注意:假设程序异常终止。输出缓冲区是不会被刷新的!


文件输入输出:
要想读写文件,能够定义一个文件流对象。将其对象与文件关联起来。

创建流对象时。我们能够提供文件名称,假设提供了文件名称。则open函数会被自己主动调用。

  1. ifstream in(s);//构造一个ifstream并打开文件
  2. ofstream out;//并未关联不论什么文件

当fstream对象被销毁时,close会自己主动调用。


  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8. string s1("in");
  9. string s2("out");
  10. string s3;
  11.  
  12. ifstream in(s1);
  13. ofstream out(s2);
  14.  
  15. while(getline(in, s3))
  16. {
  17. out << s3 << endl;
  18. }
  19.  
  20. return 0;
  21. }

课后习题:
  1. #include <iostream>
  2. #include <sstream>
  3. #include <fstream>
  4. #include <vector>
  5.  
  6. using namespace std;
  7.  
  8. int main()
  9. {
  10. string szFileName("in");
  11. vector<string> vecStr;
  12. string line;
  13.  
  14. ifstream in(szFileName.c_str());
  15. while(getline(in, line))
  16. {
  17. cout << line << endl;
  18. vecStr.push_back(line);
  19. }
  20. cout << "=================" << endl;
  21. for(vector<string>::iterator i = vecStr.begin(); i!=vecStr.end(); ++i)
  22. {
  23. cout << *i << endl;
  24. }
  25.  
  26. return 0;
  27. }

版权声明:本文博客原创文章,博客,未经同意,不得转载。

C++ Primer笔记4_静态成员类_IO库的更多相关文章

  1. C++ Primer笔记1_转义字符_标准库类型string_标准库类型vector

    1.转义字符 一般有两种方式: \x后紧跟1个或多个十六进制数字.或\后紧跟1.2.3个八进制数字,当中数字部分是字符相应的数值. #include <iostream> using na ...

  2. C++ Primer笔记

    C++ Primer笔记 ch2 变量和基本类型 声明 extern int i; extern int i = 3.14;//定义 左值引用(绑定零一变量初始值,别名) 不能定义引用的引用:引用必须 ...

  3. 静态/动态函数库设计,王明学learn

    静态/动态函数库设计 Linux应用程序设计中需要的外部函数主要由函数库和系统调用来提供. 两者区别: 一.函数库分类 函数库按照链接方式可分为: 1.静态链接库 对函数库的链接是放在编译时期(com ...

  4. STL笔记(6)标准库:标准库中的排序算法

    STL笔记(6)标准库:标准库中的排序算法 标准库:标准库中的排序算法The Standard Librarian: Sorting in the Standard Library Matthew A ...

  5. linux静态与动态库创建及使用实例

    一,gcc基础语法: 基本语法结构:(由以下四部分组成) gcc -o 可执行文件名 依赖文件集(*.c/*.o) 依赖库文件及其头文件集(由-I或-L与-l指明) gcc 依赖文件集(*.c/*.o ...

  6. Effective Java 第三版——24. 优先考虑静态成员类

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  7. python学习笔记4_类和更抽象

    python学习笔记4_类和更抽象 一.对象 class 对象主要有三个特性,继承.封装.多态.python的核心. 1.多态.封装.继承 多态,就算不知道变量所引用的类型,还是可以操作对象,根据类型 ...

  8. ArcGIS案例学习笔记_3_2_CAD数据导入建库

    ArcGIS案例学习笔记_3_2_CAD数据导入建库 计划时间:第3天下午 内容:CAD数据导入,建库和管理 目的:生成地块多边形,连接属性,管理 问题:CAD存在拓扑错误,标注位置偏移 教程:pdf ...

  9. Java的静态成员类

    Java的静态成员类: 1.静态成员类是最简单的嵌套类.最好把它看成一个普通的类,只是碰巧被声明在另一个类的内部而已,它可以访问外围类的所以成员,包括那些声明为私有的成员. 2.静态成员类是外围类的一 ...

随机推荐

  1. Android permission 访问权限

    程序执行需要读取到安全敏感项必需在androidmanifest.xml中声明相关权限请求, 完整列表如下: android.permission.ACCESS_CHECKIN_PROPERTIES ...

  2. 基于VLC的视频播放器

    原文:基于VLC的视频播放器 最近在研究视频播放的功能,之前是使用VideoView.在网上看了一下,感觉不是很好,支持的格式比较少,现在网络视频的格式各种各样,感觉用VideoView播放起来局限性 ...

  3. [HDU 1427]速度计算24点(DFS暴力搜索)

    主题连接:  pid=1427">http://acm.hdu.edu.cn/showproblem.php?pid=1427 思路:简单的DFS.dfs(sum,next,p)表 ...

  4. 第三章 AOP 编程选择

    Spring为我们开发者提供了多种AOP的编程方式.我们该如何选择呢? 如果项目采用的是JDK5.0以上版本,我们可以选择@AspectJ的方式.这是第一选择. http://blog.csdn.ne ...

  5. 怎样获取android手机联系人并按字母展示(一)

    android提供了本地数据库的查询uri,能够查询出数据: 採用一个AsyncQueryHandler来进行查询, AsyncQueryHandler自己开启了线程来进行数据查询,非常方便 prot ...

  6. 杭州电 3711 Binary Number

    Binary Number Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) To ...

  7. Android定位功能(二)

    在前文Android定位功能(一)中,已经大致介绍了一下在Android平台中,和定位功能相关的类,并举例获取了位置信息.但是前文是基于Criteria定制了一个标准,通过getBestProvide ...

  8. 【原创】poj ----- 1611 The Suspects 解题报告

    题目地址: http://poj.org/problem?id=1611 题目内容: The Suspects Time Limit: 1000MS   Memory Limit: 20000K To ...

  9. Oracle Hints详细解释

    特别介绍给大家Oracle Hints之前,让我们知道下Oracle Hints什么,然后好Oracle Hints,我们希望实际.基于成本的优化器是很聪明,在大多数情况下,将选择正确的优化,减少DB ...

  10. state pattern

    6 状态模式总结 状态模式将一个对象在不同状态下的不同行为封装在一个个状态类中,通过设置不同的状态对象可以让环境对象拥有不同的行为,而状态转换的细节对于客户端而言是透明的,方便了客户端的使用.在实际开 ...