c++速成,适合有c基础的朋友(2)

5.I/O流————对象和类入门
  a.流和基本文件
     流 是一个由字符构成的流(flow)。如果流向程序,被称为输入流。如果流出程序,则称为输出流。输入流可能由键盘或文件提供,输出流可以流向屏幕或文件。
     cin和cout就是输入输出流的例子。
     如果定义了一个输入流:in_stream 这个流来源与某个文件,则:
     int the_number;
     in_stream >> the_number;
     类似的,如果定义了out_stream输出到某个文件中:

     out_stream << "the number is" << the_number;
     要用一个流来从文件获取数据(或将数据发送到文件中),首先要声明流,然后将流与文件连接起来。可将与流连接起来的文件视为这个文件的值,改变值即改变
     连接文件。
     声明方式:#include<fstream>
               using namespace std;
               ifstream in_stream;
               ofstream out_stream;
     连接方式:in_stream.open("infile.dat");   //可以暂时理解为c语言中的结构体类似的语法。
     完成了连接,可以利用输入流读取数据:
               int number_1 , number_2;
               in_stream >> number_1 >> number_2;
     程序的真实文件名只在open函数中使用,其余的时候都使用与之相关的流名。
     eg: #include<fstream>
         using namespace std;

         int main()
         {
 
         using namespace std;
         ifstream in_stream;
         ofstream out_stream;
         int number_1 , number_2 ,number_3 ,number_4;
 
         in_stream.open("infile.dat");
         out_stream.open("outfile.dat");

         in_stream >> number_1 >> number_2 >> number_3 >> number_4;
         out_stream << "these are four numbers:" << number_1 << number_2
                    << number_3 << number_4 << endl ;
 
         in_stream.close();    
         out_stream.close();    //将打开的文件关掉
 
         }
  b.类与对象入门
    流其实就是对象。对象是一个变量,和它关联的既有函数,也有数据。与对象关联的函数称为成员函数。
    如果一个类型的变量是对象,这个类型就是类(class)。类是一种类型,他的对象就是变量。
    ifstream类和ofstream类都有一个名为fail的成员函数,在打开文件后调用:
    in_stream.fail();
    如果文件打开失败,会返回一个boolean类型的ture值,用以判断文件是否打开。
    eg: int_stream.open("stuff.dat");
        if(in_stream.fail())
        {
               exit(1);          //终止程序
        }
    exit语句:%1.使用时要声明:#include<cstdlib>
              %2.如果因为错误而调用exit,实参为1,其余为0。
  c.流I/O工具
    %1.用流函数格式化输出
       可以用于规范程序的输出格式
       eg: cout.setf(ios::fixed);  //ios::scientific输出的是科学计数法
           cout.setf(ios::showpoint);
           cout.precision(2);
       之前的用于控制小数的输出。
       一个十分常用的函数是输出空格的函数:
           cout.width(n);               //会打印n-1个空格。                                                
    %2.操纵元
       这里介绍两个操纵元:setw和setprecision
       setw(n)和cout.width(n)有相似的作用,只是用法不相同
       eg:cout << "Start" << setw(4) <<"1,2,3";
       setprecision可以用来控制输出小数小数点的情况。
       eg:cout.setf(ios::fixed);
          cout.setf(ios::showpoint);
          cout << "$" << setprecision(2) << 10.3;
       要使用操纵元,要包含#include<iomanip>。
       流文件可以作为函数的实参,唯一的限制是必须采用传引用参数。
  d.字符I/O
    %1.get和put成员函数
       get函数允许程序读取输入的一个字符,并将它存储到char类型的变量中。每一个输出流都提供了get成员的函数。
       eg: char letter;
           cout.get(letter);
       注:这样的输入方式不会忽略任何的字符,包括换行符和空格符。对这一点要十分注意,以免造成错误。
       put函数与get类似,只是put函数用于输出字符型变量。
       eg: cout.put('a');
    %2.eof成员函数
       in_stream.eof();       //end of file;
       这是一个boolean型函数,如果程序越过了文件的末尾,则返回true。可以用来判断是否已经到了文件尾。
    %3.预定义字符函数
       这里介绍toupper和tolower:
       要使用这两个函数必须包含:#include<cctype>
       toupper函数返回小写字母对应的大写字母,tolower函数则恰好相反。需要注意的是,这两个函数返回的是int值,故:
       cout << static_cast<char>(toupper('a'));
6.数组
  a.数组入门
  %1.声明和引用数组:
     int score[5];  //数组的声明方式与c相同。
     int score[5],max,min;   //可以与普通变量一起声明。
     数组的引用:
     int n=2;
     score[n+1]=3;  //同样与c语言相同。
     注意:数组的引索是从0开始的。编程时可以考虑将数组的长度设置为常量。
     eg:const int number_of_score = 5;
        int score[number_of_score];
     数组引索越界编译是不会报错,可能造成毁灭性的后果,请在引用是注意。
  %2.初始化数组:
     eg:int children[3]={2,12,1};
     如果在声明一个数组时初始化它,可以省略数组的大小。
     eg:int children[]={2,12,1};
  b.函数中的数组:
  %1.索引变量作为函数参数
     如果函数的变量是int型的,那么:
     int a[4];
     int my_fuction(a[3])
  %2.整个函数作为函数的参数:
     函数可以获取整个数组作为数组的参数。作为形参的整个数组既不是一个传值调用函数,也不是一个传引用调用参数。而是一种新的形参,数组形参。
     eg:void fill_up(int a[],int size);
     int a[]是一个数组形参。在调用函数时,调用方式如下:
     int score[5];
     int number_of_score=5;
     fill_up(score,number_of_score);
     注意,如果函数中的数组形参发生改变,数组实参也会发生改变。因为实际传给函数的是数组第一个元素在内存中的地址。所以通常还需要一个int实参来表示数组的
     大小。
  %3.const参数修饰符
     如果要求在函数的过程中不希望数组被更改,可以使用const函数修饰符。
     eg:int my_fuction(const int a[],int number_of_a);   //这样的声明在a[]被修改时会编译报错。
  %4.返回数组的函数
     只用利用指针返回一个数组。
  %5.多维数组:
     多维数组基础:
     声明:eg: int array_number[100][100];
                char array_symbol[100][100];
     多维数组作为函数变量
         形式为char array_symbol[][100]
         eg:   void display(char array_number[][100],int size_dimension_1);
         考虑到多维数组在内存中的存放方式,这样的方式就很容易理解了。
原文地址:https://www.cnblogs.com/ustczd/p/4782718.html