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.静态成员类是外围类的一 ...
随机推荐
- 关于git的ssh-key:解决本地多个ssh-key的问题
在设置github的时候,官方的说明文档要求备份当前的id_rsa.然后生成一份新的私钥用于github的登陆.假设真这样做,那么新的私钥是无法再继续登陆之前的机器的. 这样的方法有点暴力- 还好ss ...
- Yii/Yii2:查询返回以某特定列为索引(键)的数组
在Yii1.x中,要想查询语句返回以特定列为键(key)的数组数据,代码例如以下(下述样例以表主键为返回数组索引): $users = User::model()->findAll(array( ...
- uva10791 uva10780(分解质因数)
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
- 华为-on练习--小写字符数的统计显示
主题: 手动输入一个字符串,只有小写字母,统计每个字符和输出频率中出现的串,输出.提示可以使用map 样例:输入:aaabbbccc 输出:a 3 b 3 c 3 分析: 看到后面的提示,简直就是不用 ...
- 简单ESB的服务架构
简单ESB的服务架构 这几个月一直在修改架构,所以迟迟没有更新博客. 新的架构是一个基于简单esb的服务架构,主要构成是esb服务注册,wcf服务,MVC项目构成. 首先,我门来看一看解决方案, 1. ...
- HDU1163 Eddy's digital Roots【九剩余定理】
Eddy's digital Roots Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Oth ...
- hdu 4268 Alice and Bob(multiset|段树)
Alice and Bob Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- 【原创】leetCodeOj --- Sort List 解题报告
今日leetcode链表题全制霸 原题地址: https://oj.leetcode.com/problems/sort-list/ 题目内容: Sort List Sort a linked lis ...
- Oracle在不同的语言环境结果to_date错误的问题
我写了一个存储过程,它使用了功能,有一些功能to_date(dateFrom, 'yyyy/mm/dd').执行发现数据插入错误后,数据插入"0001/9/14". 感觉莫名其妙, ...
- 最佳新秀SSH十六Struts2它是如何工作的内部
前面说完了Spring.Hibernate,非常自然今天轮到struts了.struts的核心原理就是通过拦截器来处理client的请求,经过拦截器一系列的处理后,再交给Action.以下先看看str ...