C++ Primer笔记4_静态成员类_IO库
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的内容都是马上刷新的
- 一个输出流可能被关联到还有一个流。此时缓冲区会被刷新
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库的更多相关文章
- C++ Primer笔记1_转义字符_标准库类型string_标准库类型vector
1.转义字符 一般有两种方式: \x后紧跟1个或多个十六进制数字.或\后紧跟1.2.3个八进制数字,当中数字部分是字符相应的数值. #include <iostream> using na ...
- C++ Primer笔记
C++ Primer笔记 ch2 变量和基本类型 声明 extern int i; extern int i = 3.14;//定义 左值引用(绑定零一变量初始值,别名) 不能定义引用的引用:引用必须 ...
- 静态/动态函数库设计,王明学learn
静态/动态函数库设计 Linux应用程序设计中需要的外部函数主要由函数库和系统调用来提供. 两者区别: 一.函数库分类 函数库按照链接方式可分为: 1.静态链接库 对函数库的链接是放在编译时期(com ...
- STL笔记(6)标准库:标准库中的排序算法
STL笔记(6)标准库:标准库中的排序算法 标准库:标准库中的排序算法The Standard Librarian: Sorting in the Standard Library Matthew A ...
- linux静态与动态库创建及使用实例
一,gcc基础语法: 基本语法结构:(由以下四部分组成) gcc -o 可执行文件名 依赖文件集(*.c/*.o) 依赖库文件及其头文件集(由-I或-L与-l指明) gcc 依赖文件集(*.c/*.o ...
- Effective Java 第三版——24. 优先考虑静态成员类
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- python学习笔记4_类和更抽象
python学习笔记4_类和更抽象 一.对象 class 对象主要有三个特性,继承.封装.多态.python的核心. 1.多态.封装.继承 多态,就算不知道变量所引用的类型,还是可以操作对象,根据类型 ...
- ArcGIS案例学习笔记_3_2_CAD数据导入建库
ArcGIS案例学习笔记_3_2_CAD数据导入建库 计划时间:第3天下午 内容:CAD数据导入,建库和管理 目的:生成地块多边形,连接属性,管理 问题:CAD存在拓扑错误,标注位置偏移 教程:pdf ...
- Java的静态成员类
Java的静态成员类: 1.静态成员类是最简单的嵌套类.最好把它看成一个普通的类,只是碰巧被声明在另一个类的内部而已,它可以访问外围类的所以成员,包括那些声明为私有的成员. 2.静态成员类是外围类的一 ...
随机推荐
- Linux下Oracle11G RAC报错:在安装oracle软件时报file not found一例
Linux下Oracle11G RAC报错:在安装oracle软件时报file notfound一例 1.现象 之前安装一切都比較顺利,安装oracle软件时,进度到30%时报错:file not f ...
- .NET垃圾回收笔记
名词 垃圾收集目标 ephemeral GC 发生在Gen 0 和Gen 1 的垃圾收集 Full GC 发生Gen 2 及以上的Gen与LOH的垃圾收集 垃圾收集模式 工作站模式 GC直接发生在内存 ...
- 一起学习android图片四舍五入图片集资源 (28)
效果图: 參看下面代码: public class MainActivity extends Activity { private ImageView imageView1; private Imag ...
- [Windwos Phone] 实作地图缩放 MapAnimationKind 属性效果
原文:[Windwos Phone] 实作地图缩放 MapAnimationKind 属性效果 [前言] 使用经纬度来定位地图的位置,以及使用 MapAnimationKind 属性来设定地图缩放时的 ...
- 如何设置一个activity透明
1.在AndroidManifest.xml文件中设置: android:theme="@android:style/Theme.Translucent 此代码固定为全背景透明. 2.在Ac ...
- 玩转web之servlet(六)---session介绍及简单使用(登录验证中保存信息)
在浏览器与服务器进行交互时,往往需要把涉及到的一些数据保存下来,这时就需要使用cookie或session进行状态管理. 这篇文章先来说说session怎么用,首先在servlet中创建一个sessi ...
- 从控制台读取password - C#
Tip : 从控制台读取password 语言: C# ______________________________________________________________ 在登陆Lin ...
- 《Qt on Android核心编程》夹
china-pub在售前,售中环节退房,折扣低! 有朋友想看看<Qt on Android核心编程>的文件夹,So-- 文件夹 <Qt on Android核心编程>文 ...
- Asp.NET MVC3 使用 SignalR 实现推(持续)
一,Persistent Connection 演示示例教程 1.实现server端代码 1),编写server PersistentConnection 代码 项目中 SignalR 文件夹下创建 ...
- Android开发经验—不要指望类finalize干活的方法做你想要什么
之所以专门写了一篇文章finalize方法博客,这是通过在坑的方法引起的.一个读写jni当数据类.我在课堂上finalize该方法被调用来关闭文件和释放内存的方法.频繁调用这个类的时候在JNI里面报异 ...