c++笔记之异常处理、名字空间、文件输入输出流

异常处理
1、c++异常处理机制不仅能够处理各种不同类型的异常,还具有为异常抛掷前构造的所有局部对象自动调用析构函数的能力。



名字空间
1、访问空间的成员的4种方式
    (1)直接访问  名字空间名字::成员名字
    (2)指定名字空间    using namespace 名字空间;
    (3)声明引用成员    using 【名字空间】::【名字】   声明成员引用是将名字空间的成员加入当前作用域,也就是说,不能再定义和引用的名字空间成员同名的标识符,因为同一个作用域内不允许存在相同名字的成员。
    (4)使用别名法    namespace 别名=名字空间;
2、当名字空间的成员和程序的全局标识符同名时,可以通过作用域运算符“::”限定程序的全局标识符;
   当名字空间的成员和程序的局部标识符同名时,首先访问的是程序的局部标识符。
3、每个编译单元(文件)都可包含一个未命名的名字空间,未命名的名字空间中定义的名字只在包含该名字空间的文件中可见。
   如果多个文件包含未命名的名字空间,这些名字也代表不同的对象。(和static类似)
4、c++的头文件有的有扩张名(.h),有的又没有扩展名,比如<iostream.h>和<iostream>,这是为什么?
   因为早期c++标准没有名字空间,头文件都带.h,后来将c++标准库加入std名字空间中,然后修改了头文件名字。c++标准库中的所有组件都是在一个    
   称为std的名字空间中声明和定义的。

文件输入输出流
1、cerr(console error)和clog(console log)都是用来输出出错信息的,两者之间的区别是:cerr没有被缓冲,因而发送给它的任何内容都立即输出;clog被缓冲,只有当缓冲区满了后才进行输出。
2、cerr和cout的区别:cout有缓冲,要把输出的数据先放到缓冲区中,然后从缓冲区到你指定的设备中,(默认为显示器)可以被重定向;cerr 没有被缓冲, 不能被重定向。
3、当向cout流插入一个endl,不论缓冲区是否满了,都立即输出流中的所有数据。
4、c++的I/O流类库是用继承方法建立起来的一个输入输出类库,它具有两个平行类:streambuf类和ios类(基本类)。
    streambuf 类提供物理设备的接口,它提供缓冲或处理流的通用方法,提供对缓冲区的低级操作,如设置缓冲区、对缓冲区指针进行操作、从缓冲区取字符、向缓冲区存储字符。有三个派生类:
        filebuf类使用文件来保存缓冲区中的字符序列;
        strstreambuf类提供了在内存中进行提取和插入操作的缓存区管理
        conbuf类用于处理输出,提供了控制光标、设置颜色、定义活动窗口、清屏等功能
   ios类是一个虚基类,他主要定义了用于格式化输入输出及出错处理的成员函数。在ios类和它的各级派生类中,均含有一个指向流缓冲类streambuf的对象的指针。
5、缓冲区由一个字符序列和两个指针组成,这两个指针是输入缓冲区指针和输出缓冲区指针。
6、格式化I/O的两种控制方法:使用 ios类中的格式控制 成员函数;使用 操纵符的特殊类型 的函数
7、fmtflags中定义的各种格式标识
    boolalpha 以true和false形式读写bool变量
    dec    以十进制方式读写
    oct    以八进制方式读写
    hex    以十六进制方式读写
    skipws    跳过输入中的空白
    left    输出时左对齐
    right    输出时右对齐(默认右对齐) 
    internal    输出时两端对齐
    showbase    输出时显示基数指示符(0x,0之类的)
    showpoint    输出浮点数时带有小数点,并尾随0
    uppercase    十六进制数输出时,数值中的字母用大写字母表示
    showpos    非负数据前显示“+”符号
    scientific    以科学计数法显示浮点数
    fixed    以定点形式显示浮点数
    unitbuf    在输出操作后清空缓冲区
    adjustfield    格式标志必须是internal、left或right
    basefield    格式标志必须是dec、oct或hex
    floatfield    格式标志必须是fixed或scientific
     格式标志字是ios类的保护成员,不能直接访问,需要用到setf(),unsetf(),flag()函数
8、ios所定义的控制输入输出格式的成员函数
    long ios::setf(long flags);    设置特定的状态标记
    long ios::unsef(long flags);    清除状态标志,并返回清除前标志
    long ios::flags();    测试状态标志
    long ios::flags(long flags);    设置状态标志,并返回设置前标志
    long ios::width();    返回当前的宽度设置值
    long ios::width(int w);    设置域宽w,返回以前的设置(默认值为0,表示无域宽;设置后仅对下个输出有影响,输出完后自动置0)
    long ios::precision(int p);    确定在一个浮点数中显示的有效位数(默认有效位为6位)
    char ios::fill();    返回当前的填充字符
    char ios::fill(char ch);    设置填充字符ch,返回当前的填充字符(默认值为空格)
9、要设置setf(oct/dec/hex)中的一种,必须清除另外两个标志。可以用unsetf函数或者setf(ios::basefield);
10、操纵符进行格式化控制比使用ios格式标志和成员函数(每个函数的调用需要单独写一条语句)更方便:
    常用的操纵符:
    dec
    oct
    hex
    endl    换行并刷新输出流   
    fixed    
    scientific
    flush    刷新输出流
    left
    right
    setfill(char c)    
    setprecision(int n)
    setw(int n)
    showpoint
    noshowpoint
    showpos
    noshowpos
    skipws    忽略输入前的空白
    noskipws
    resetioflags(long f)    清除特定格式标志
    setiosflags(long f)    设置特定格式标志
    ws    删除空白
     除了setw,其他操作符都将永久改变它所应用到的输入或输出流的状态,setw的影响仅持续到下个输入或输出操作。
11、c++文件根据数据的组织形式,可分为ASCII文件和二进制文件(内存中的存储形式)。
12、文件流常用的成员函数:
          open()    打开一个文件并把它与流关联
     close()
     fail()    测试是否打开文件失败,失败其值为1
     eof()    测试是否文件尾,是则为1
     read()    从流中读出一组字节
     write()    把一组字节写入流中
     seekp()    修改输出流文件的指针位置
     seekg()    修改输入流文件的指针位置
     tellp()    获得输出流文件的当前位置
     tellg()    获得输入流文件的当前位置
13、打开文件两种形式:用文件流的成员函数open()打开文件;用文件流类的析构函数打开函数
14、文件打开方式:(默认忽略空格)
    in    读方式
    out   单用时,若文件不存在,则产生一个空文件;若文件存在,则清空文件
    ate   必须和in、out或noreplace组合使用,如out|ate,其作用是在文件打开时将文件指针移至文件末尾
    app   以写追加方式打开文件,当文件存在时,他等价于out|ate;而文件不存在时,它等价于out
    trunc   单用时,与out等价
    nocreate    打开文件时,若文件不存在,则打开文件失败。这种方式总是与读或写方式组合使用,但不能和noreplace组合使用
    noreplace    用来创建一个新文件,不单用,总是与写方式组合使用。若与ate或app组合使用,也可打开一个已有文件。
    binary    以二进制方式打开文件,总是与读或写方式组合使用
15、当打开方式中不含有ios::ate或者ios::app选项时,则文件指针被自动移至文件的开始位置。
16、对二进制文件的读写要使用到文件流的成员函数read()和write()
    例子:filename.write((char*)&i,sizeof(i));
17、文件的随机访问
    istream& istream::seekg(streampos); //绝对定位,相对于开头
    istream& istream::seekg(streamoff,ios::seek_dir); //相对定位,seek_dir取值beg、cur、end
    streampos istream::tellg(); //返回当前文件读写位置

    o stream& ostream::seekp(streampos); //绝对定位
    ostream& ostream::seekp(streamoff,ios::seek_dir); //相对定位,seek_dir取值beg、cur、end
    streampos istream::tellp(); //返回当前文件读写位置

    
    

    
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值