1.静态成员类

static成员变量与函数

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

static成员函数:

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

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

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

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

样例:

#include <iostream>
using namespace std; class A
{
public:
A(int a):age(a){cout << n << endl;}
void print()const
{
cout << "age: " << age << endl;
//printN(); Right!
}
static void printN()
{
cout << "n: " << n << endl;
//cout << "age: " << age << endl; Error!
}
private:
int age;
static int n;
}; int A::n = 20; int main()
{
A a(10);
a.print();
a.printN();
A::printN();
return 0;
}

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两个操作符能够刷新缓冲区,例如以下所看到的:
cout << "scott" << endl;//输出scott和一个换行符。然后刷新缓冲区
cout << "scott" << flush;//输出scott 然后刷新缓冲区
cout << "scott" << ends;//输出scott和一个空字符 然后刷新缓冲区

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


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

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

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

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


#include <iostream>
#include <fstream>
#include <string>
using namespace std; int main()
{
string s1("in");
string s2("out");
string s3; ifstream in(s1);
ofstream out(s2); while(getline(in, s3))
{
out << s3 << endl;
} return 0;
}

课后习题:
#include <iostream>
#include <sstream>
#include <fstream>
#include <vector> using namespace std; int main()
{
string szFileName("in");
vector<string> vecStr;
string line; ifstream in(szFileName.c_str());
while(getline(in, line))
{
cout << line << endl;
vecStr.push_back(line);
}
cout << "=================" << endl;
for(vector<string>::iterator i = vecStr.begin(); i!=vecStr.end(); ++i)
{
cout << *i << endl;
} return 0;
}

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

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. 批处理程序:自动上传FTP,再登陆linux服务器执行更新

    ----转载请注明出处:博客园-邦邦酱好 最近在学批处理程序,一直没找到能够结合工作来使用它的地方,前几天测试服务端的时候突然想到可以这样做: 写一个批处理程序,自动通过FTP上传软件包到指定的地方, ...

  2. SDL2源码分析5:更新纹理(SDL_UpdateTexture())

    ===================================================== SDL源码分析系列文章列表: SDL2源码分析1:初始化(SDL_Init()) SDL2源 ...

  3. Leetcode_191_Number of 1 Bits

    本文是在学习中的总结.欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/44486547 Write a function that ...

  4. Cocos2d-x 地图步行实现1:图论Dijkstra算法

    下一节<Cocos2d-x 地图行走的实现2:SPFA算法>: http://blog.csdn.net/stevenkylelee/article/details/38440663 本文 ...

  5. hdu3037(lucas定理)

    给定n,m,p   表示<=m个豆子放在n棵树上,一共有多少种方案数,  总的方案书mod p 如果将m个豆子放在n棵树上, 可以使用插板法 得到方案数是C(n+m-1,n-1) 那么将0< ...

  6. 猫学习IOS(三)UI纯代码UI——图片浏览器

    猫分享.必须精品 看看效果 主要实现相似看新闻的一个界面,不用拖拽,纯代码手工写. 首先分析app能够非常easy知道他这里有两个UILabel一个UIImageView还有两个UIButton 定义 ...

  7. Eclipse 打JAR包,插件FatJar 安装与使用

    下载fatJar插件,解压缩后是一个.../plugins/(net...)把plugins下面的(net..)文件夹拷贝到eclipse的plugins下,重新启动Eclipse3.1,Window ...

  8. ovs处理openflow消息的流程

    OVS处理各个openflow消息的详细代码在 ofproto/ofproto.c 中: static enum ofperr handle_openflow__(struct ofconn *ofc ...

  9. go语言实现遍历目录,及查找特定的文件类型

    // filelist.go package main import ( //"flag" "fmt" "os" "path/fi ...

  10. yum简介(转)

    yum是什么yum = Yellow dog Updater, Modified 主要功能是更方便的添加/删除/更新RPM包. 它能自动解决包的倚赖性问题. 它能便于管理大量系统的更新问题yum特点可 ...