C++ Primer笔记4_类的静态成员_IO库
2014-06-04 15:10
246 查看
1.类的静态成员
static成员变量与函数
static成员变量:必须在类外初始化;(const或引用类型变量必须在构造函数初始化列表里初始化)
static成员函数:
不依赖于类,相当于类里的全局函数(可以由该类对象调用,也可以 类名::函数名()的形式调用)
不包含this指针,不能声明为const,声明为const表示不会改变对象,而static成员函数存在于任何对象之外。
相当于把访问范围限制在所在的类中! 注意:不能访问类中非static成员变量以及非static成员函数。
注意:虽然静态成员不属于类的某个对象,但我们仍然可以使用类的对象、引用、指针来访问静态成员。
例子:
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两个操作符可以刷新缓冲区,如下所示:
注意:如果程序异常终止,输出缓冲区是不会被刷新的!
文件输入输出:
要想读写文件,可以定义一个文件流对象,将其对象与文件关联起来。创建流对象时,我们可以提供文件名,如果提供了文件名,则open函数会被自动调用。
课后习题:
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库
- C++ 类的静态成员详细讲解
- 嵌入式开发之C++基础学习笔记5--静态成员,友元,运算符重载,模板,文件流
- 数组--->工具类的构造函数需私有化,成员方法为静态
- 静态成员
- static关键字的作用以及静态成员函数与非静态成员函数的区别
- C++ 类的静态成员详细讲解
- c++静态成员
- C++静态成员小结
- C++静态成员
- C++静态数据成员的引用
- Effective Java 3rd 条目24 静态成员类优于非静态
- 静态成员声明,定义(转)
- C++类的静态成员和静态函数
- C++ 类的静态成员(static)
- C++静态成员函数和静态成员变量的探索
- C++ Primer笔记(二)标准IO库
- C++ 静态数据成员
- Qt 静态回调函数访问类成员变量解决办法
- 静态变量 成员变量 局部变量三者的区别