zoukankan      html  css  js  c++  java
  • 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的内容都是马上刷新的
    • 一个输出流可能被关联到还有一个流。此时缓冲区会被刷新
    除了endl,还有flushends两个操作符能够刷新缓冲区,例如以下所看到的:
    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++11 Lambda表达式
    C++ 容器操作
    C/C++ 动态存储分配 malloc calloc realloc函数的用法与区别
    使用visual C++测试
    设计模式有感
    smartProgram学习笔记
    C++析构函数
    C++指针和引用
    Python机器学习笔记:常用评估模型指标的用法
    Python机器学习笔记:不得不了解的机器学习面试知识点(1)
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4730078.html
Copyright © 2011-2022 走看看