1.????????????? I/O流的常用控制符
????????????? dec???????????????????????? 置基數(shù)為10
????????????? hex???????????????????????? 置基數(shù)為16
????????????? oct???????????????????????? 置基數(shù)為8
????????????? setfill(c)????????????????? 設(shè)填充字符為C
????????????? setprecision(n)???????????? 設(shè)顯示小數(shù)精度為n位
????????????? setw(n)???????????????????? 設(shè)域?qū)挒镹個字符
????????????? setiosflags(ios::fixed)???? 固定的符點(diǎn)顯示
????????????? setiosflags(ios::scientific)指數(shù)表示
????????????? setiosflags(ios::left)????? 左對齊
????????????? setiosflags(ios::right)???? 右對齊
????????????? setiosflags(ios::skipws)??? 忽略前導(dǎo)空白
????????????? setiosflags(ios::uppercase) 16進(jìn)制數(shù)大寫輸出
????????????? setiosflags(ios::lowercase) 6進(jìn)制數(shù)小寫輸出??
????????????? setiosflags(ios::showpoint) 顯示小數(shù)點(diǎn)
????????????? setiosflags(ios::showpos)?? 正數(shù)前面加上正號
2.頭文件:*iostream.h*??? *iomanip.h*?? *stdlib.h*
?????????? cout/cin?? 流的控制符? exit(0)??????
3.指針的幾種類型:
? int (*p)();p為指向函數(shù)的指針變量,該函數(shù)帶回一個整型值
? int *p();p為返回一個指針的函數(shù),該指針指向整型數(shù)據(jù)
? int (**p)[n];p為一個指向一個指針變量的指針變量,被指向的指針變量指向一個含n個整形數(shù)據(jù)的一維數(shù)組
4.構(gòu)造函數(shù)和析構(gòu)函數(shù)特點(diǎn)及其區(qū)別:
?? a.構(gòu)造函數(shù)可以有任意個形參,還可以重載(多個參數(shù)個數(shù)不同的函數(shù));但析構(gòu)函數(shù)不能有形參,因?yàn)槭窍到y(tǒng)自動調(diào)用的.
?? b.構(gòu)造函數(shù)不可以任意調(diào)用,只準(zhǔn)系統(tǒng)調(diào)用;而析構(gòu)函數(shù)不僅系統(tǒng)調(diào)用,也可以任意調(diào)用.???????????????????????????????
5.構(gòu)造函數(shù)和析構(gòu)函數(shù)什么時候自動運(yùn)行?(例61)
????????? 構(gòu)造函數(shù):一般在定義類對象時自動運(yùn)行.
????????? 析構(gòu)函數(shù):如果一個函數(shù)中定義了一個對象,則在這個函數(shù)運(yùn)行結(jié)束時就執(zhí)行一次;
?????????????????? 當(dāng)一個對象是使用NEW運(yùn)算符被動態(tài)創(chuàng)建的,在使用DELETE運(yùn)算符釋放它時,DELETE將會自動調(diào)用析構(gòu)函數(shù).
????????? 拷貝初始化構(gòu)造函數(shù):當(dāng)用tpoint N(M);語句時調(diào)用一次;
???????????????????????? 當(dāng)對象作為實(shí)參向形參傳遞時,即對形參初始化時執(zhí)行一次;
???????????????????????? 當(dāng)遇到M=return(N);語句,即對M進(jìn)行初始化時調(diào)用一次;
6.this 指針用法:例63中,當(dāng)程序執(zhí)行語句list elem(i);時,系統(tǒng)對this指針進(jìn)行了如下的缺省賦值:this=&list;
??????????????? 賦值成員函數(shù)舉例(此例在例63基礎(chǔ)上):
????????????????????? void Assign(linear_list&);//說明語句;
????????????????????? void linear_list::Assign(linear_list&p)
?????????????????????? {if(&p==this)
?????????????????????????? return;
??????????????????????? nmax=p.nmax;
??????????????????????? nelem=p.nelem;
??????????????????????? list=new int[nmax];
??????????????????????? for(int i=0;i<nmax;i++)
?????????????????????????? list[i]=p.list[i];
?????????????????????? }??
7.const,volatile對象和const,volatile成員函數(shù)
? 格式:const person per/volatile person per;???????????????????????
?????? int func(int) const;/char func(int) volatile;
? 說明:1.普通對象既可以訪問const對象,又可以訪問volatile對象;
?????? 2.const對象只能訪問用const修飾的成員函數(shù);
???????? volatile對象只能訪問用其所長volatile修飾的成員函數(shù);
?????? 3.也可以同時說明為const volatile對象或const volatile成員函數(shù);
???????? const volatile對象只能訪問const volatile成員函數(shù);
???????? const/volatile對象也能訪問const volatile成員函數(shù);
8.不同繼承方式的基類和派生類特性
? ------------------------------------------------
?? 繼承方式????? |?? 基類特性??????? |? 派生類特性
? ------------------------------------------------
???????????????? |?? public????????? |? public
?? 公有繼承????? |?? protected?????? |? protected
???????????????? |?? private???????? |? 不可訪問
? ------------------------------------------------
???????????????? |?? public????????? |? private
?? 私有繼承????? |?? protected?????? |? private
???????????????? |?? private???????? |? 不可訪問??
? ------------------------------------------------
???????????????? |?? public????????? |? protected
?? 保護(hù)繼承????? |?? protected?????? |? protected
???????????????? |?? private???????? |? 不可訪問
? ------------------------------------------------
? A:幫助理解:1)對于公有繼承方式:
?????????????? a.基類成員對其對象的可見性:公有成員可見,其他不可見。這里保護(hù)成員同于私有成員。
?????????????? b.基類成員對派生類的可見性:公有成員和保護(hù)成員可見,而私有成員不可見。這里保護(hù)成員同于公有成員。
?????????????? c.基類成員對派生類對象的可見性:公有成員可見,其他成員不可見。
??????????? 所以,在公有繼承時,派生類的對象可以訪問基類中的公有成員;派生類的成員函數(shù)可以訪問基類中的公有成員和保護(hù)成員。這里,一定要區(qū)分清楚派生類的對象和派生類中的成員函數(shù)對基類的訪問是不同的。
??????????? 2) 對于私有繼承方式:
?????????????? a.基類成員對其對象的可見性: 公有成員可見,其他不可見。
?????????????? b.基類成員對派生類的可見性:公有成員和保護(hù)成員可見,而私有成員不可見??????
?????????????? c.基類成員對派生類對象的可見性:所有成員都是不可見的。
??????????? 所以,在私有繼承時,基類的成員只能由直接派生類訪問,而無法再往下繼承。
??????????? 3) 對于保護(hù)繼承方式:
?????????????? 與私有繼承方式相同,兩者的區(qū)別僅在于對派生類的成員而言,對基類成員有不同的可見性。
?B:幫助理解:1) 公有繼承時,水平訪問和垂直訪問對基類中的公有成員不受限制。
???????????? 2) 私有繼承時,水平訪問和垂直訪問對基類中的公有成員也不能訪問。
???????????? 3) 保護(hù)繼承時,對于垂直訪問同于公有繼承,對于水平訪問同于私有繼承。
???????????? 4) 對于基類中的私有成員,只能被基類中的成員函數(shù)和友元函數(shù)訪問,不能被其他的函數(shù)訪問。
?C:幫助理解:在公有繼承時,派生類的成員函數(shù)可訪問基類中的公有成員和保護(hù)成員;派生類的對象僅可訪問基類中的公有成員。
9.派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù):
???? 派構(gòu):
???????? 1.一般格式: 派生類名? (派生類構(gòu)造函數(shù)總參數(shù)表):基類構(gòu)造函數(shù)(參數(shù)表1),子對象名(參數(shù)表2)
????????????????????????? {派生類中數(shù)據(jù)成員初始化};
???????? 2.調(diào)用順序: a.基類的構(gòu)造函數(shù)。b.子對象類的構(gòu)造函數(shù)(如果有的話). c.派生類構(gòu)造函數(shù)。?????????????????????????
10.多繼承:是指派生類具有多個基類。
?? 多繼承的構(gòu)造函數(shù):
?????????????????? 《派生類名》(總參數(shù)表):《基類名1》(參數(shù)表1),《基類名2》(參數(shù)表2),...
?????????????????????? {派生類構(gòu)造函數(shù)體}??
11.虛基類:如果基類被聲明為虛基類,則重復(fù)繼承的基類在派生磁對象實(shí)例中只好存儲一個副本,否則,將出現(xiàn)多個基類成員副本。
?? 虛基類說明格式如下:? virtual<繼承方式><基類名>
???????????????????????? class B:virtual public A
? 注意:a.如果一個派生類有直接或間接的虛基類,那么派生類的構(gòu)造函數(shù)的成員初始列表中必須列出對虛基類的調(diào)用,如果未被列出,則表示使用該基類的缺省構(gòu)造函數(shù)來初始化派生類對象中的虛基類子對象。
??????? b.虛基類的構(gòu)造函數(shù)先于非虛基類的構(gòu)造函數(shù)調(diào)用。
??????? c.只有建立對象的那么個派生類的構(gòu)造函數(shù)調(diào)用虛基類的構(gòu)造函數(shù),而該派生類的基類中所列出的對這個虛基類的構(gòu)造函數(shù)的調(diào)用在執(zhí)行中被忽略。???
12.運(yùn)算符重載:
????? operator 函數(shù)用法:(不能有下列字符:'::','.','*','->','? :')
????????? 1.一般:int class_name::operator <運(yùn)算符> (形參列表)?? (例92)
????????? 2.增量減量運(yùn)算符:?? (例93,94,95,96)
?????????????? a.將一個增量運(yùn)算符重載為前置的成員函數(shù):
?????????????????????????? int class_name::operator++();
?????????????? b.將一個增量運(yùn)算符重載為后置的成員函數(shù):
?????????????????????????? int class name::operator++(int);
?????????????? c.將一個增量運(yùn)算符重載為前置的友元函數(shù):
?????????????????????????? int operator ++(class_name&);?????????
?????????????? d.將一個增量運(yùn)算符重載為前置的友元函數(shù):
?????????????????????????? int operator ++(class_name&,int);?????
?????????????? e.下標(biāo)運(yùn)算符:
?????????????????????????? int class_name::operator[](形參)? //只能是非靜態(tài)成員函數(shù)??????????????????????????
?????????????? f.函數(shù)調(diào)用運(yùn)算符:?
?????????????????????????? int class_name::operator()(形參表)//只能是非靜態(tài)函數(shù),且不可以帶有缺省的參數(shù)
?????????????? g.成員選擇運(yùn)算符:
?????????????????????????? class_name $/* class_name::operator->();
?????????????? h.new delete運(yùn)算符:
?????????????????????????? void *class_name::operator new(siz_t,<arg_list>);
?????????????????????????? void *class_name::operator delete(void *,<size_t>);
?????????????????? new delete只能被重載為類的成員函數(shù),不能是友元。而且無論是否使用關(guān)鍵字static
?????????????????? 進(jìn)行修飾,重載了的new和delete均為類的表態(tài)成員函數(shù)。
?????????????????????? 對于typedef unsigned size_t;
?????????????????? 在頭文件alloc.h,mem.h,stddef.h,stdio.h,stdlib.h均說明;
?????????????? i.友元函數(shù):
?????????????????????? 可以是一個類的非靜態(tài)函數(shù),也可以是類的友元函數(shù)。
????????????????????? {friend complex operator+(complex&,complex&);
????????????????????? };?
???????????????? 以下五種運(yùn)算符不說明成友元運(yùn)算符:
????????????????????? "=","()","[]","->","type";?
?????????????? j.轉(zhuǎn)換函數(shù):
???????????????????????? class_name::operator type();? //type 是任何一個合法的C++的類型名(包括基本數(shù)據(jù)類型和導(dǎo)出數(shù)據(jù)類型)以及由關(guān)鍵字const和volatile引出的表達(dá)示。)
?????????????????????????????????????????????????????? //不帶任何參數(shù),也無返回值類型,總是返回type的值。只能是類的成員函數(shù),不能說明為友元運(yùn)算符。
?????????????? k.類的賦值運(yùn)算與運(yùn)算符重載:
???????????????????????? person & person::operator=(person &p)
?????????????????????????? {dele Name;
??????????????????????????? Name=new char[strlen(p.Name)+1];
??????????????????????????? strcpy(Name,p.Name);
??????????????????????????? Age=p.Age;
??????????????????????????? Sex=p.Sex;
??????????????????????????? return *this;
?????????????????????????? }
??????????????????????? 典型例題。當(dāng)用系統(tǒng)自帶對象賦值的函數(shù),如果對象里有如 *Name 型的,則賦值后會使兩個指針同時指向一個成員元素的地址,當(dāng)調(diào)用析構(gòu)函數(shù)釋放時,會釋放兩次,多釋放一次,而產(chǎn)生錯誤,這個典型例題是用于把一個成員元素復(fù)制到另一個對象中,不是單純移動指針,當(dāng)調(diào)用析構(gòu)函數(shù)時,會釋放兩次。
?????????????? l.重載函數(shù):系統(tǒng)僅對形參加以區(qū)別。
13.虛函數(shù)
???? 一般情況下,指向一個對象的指針,不允許指向另一個對象,但指向基類對象的指針可以指向它的派生類,并可以訪問派生類中原基類成員。
???? 如果一個函數(shù)一旦說明為虛函數(shù),則無論說明它的類被繼承了多少層,在每一層中該函數(shù)都保持該virturl特性。且可以在派生類中對該函數(shù)省略virtual.
???? 虛函數(shù)必須是類的一個成員函數(shù),不能是友元,但它可以是另一個類的友元。虛函數(shù)不能是一個靜態(tài)成員。
???? 設(shè)定綁定方式,使程序具有靈活性,但執(zhí)行效率低,占用內(nèi)存多.????
14.抽象類:純虛函數(shù)
????? 純虛函數(shù)的一般形式為:virturl 類型名(參數(shù)表)=0;抽象類不能申請對象。
15.類屬結(jié)構(gòu):
?????? 1.函數(shù)模板:template <class 模板形參表>????????????????
??????????????? 返回值類型 函數(shù)名(模板函數(shù)形參表)
????????????????? {
?????????????????? 函數(shù)體;
????????????????? }
???????????? example:
???????????????? template? <class T>
???????????????? void swap(T &.x,T&.y)
????????????????? {T t;
?????????????????? t=x;x=y;y=t;
????????????????? }
?????? 2.重載函數(shù)模板:調(diào)用用次序:
??????????? 1)尋找一個完全匹配的函數(shù),找到,調(diào)用之。
??????????? 2)尋找一個函數(shù)模板,將其實(shí)例化產(chǎn)生一個匹配的模板函數(shù),找到,調(diào)用之。
??????????? 3)尋找重載函數(shù)中有無通過類型轉(zhuǎn)換后產(chǎn)生參數(shù)匹配的函數(shù),若有,調(diào)用之。
?????? 3.類模板:template <class 模板形參>
???????????????? class 類模板名
???????????????? {
????????????????? 類體;
???????????????? }
???????????? example:? tempplate <class T>
?????????????????????? class stack
?????????????????????? {private:
????????????????????????? T *date;?
????????????????????????? int top;
??????????????????????? public:
????????????????????????? isempty();
?????????????????????? }
?????????????????????? template <class T>
?????????????????????? {...}??
16.類模板的友元:
????????? a.一般的類模板友元函數(shù)。
????????? b.封閉型的類模板友元函數(shù)。當(dāng)用類型參數(shù)將類模板實(shí)例化為某個具體的模板類時,該類模板所包含的友元函數(shù)也將隨之實(shí)例化。
????????? c.開放型的類模板友元函數(shù)。
?????? 例一百二十一。
17.C++的I/O流庫
??? 1.? I/O標(biāo)準(zhǔn)流類??
??????? -----------------------------------------
??????? c++名字? |? 設(shè)備? | C中的名字 | 默認(rèn)的含義
??????? -----------------------------------------
??????? cin????? |? 鍵盤? | stdin???? | 標(biāo)準(zhǔn)輸入
??????? -----------------------------------------
??????? cout???? |? 屏幕? | stdout??? | 標(biāo)準(zhǔn)輸出
??????? -----------------------------------------
??????? cerr???? |? 屏幕? | stderr??? | 標(biāo)準(zhǔn)錯誤
??????? -----------------------------------------
??????? clog???? | 打印機(jī) | stdprn??? |? 打印機(jī)
??????? -----------------------------------------
???? 2。鍵盤輸入
??????? cin>>a>>b>>c;? //Ctrl+z終止
??????? cin.get(char &ch)//從輸入流獲取一個字符,不忽略空格Ctrl+z終止
??????? cout.put(ch)//輸出一個字符???????
EOF//其值為-1,相當(dāng)于終止符
??????? cin.geline(char *buf,int limit,Deline='\n')//buf為一個指針或數(shù)組,limit為字符個數(shù),Deline為讀取字符指定結(jié)束符。作用:從鍵盤讀入一串字符。結(jié)束用Ctrl+z.
cin.gcount()//返回getline()剛剛讀過的字符個數(shù)
??????? cin.read(char *buf,int size)//讀入指定數(shù)目的字符
cout.write(const char *str,int n)//cout.write("string",strlen("string");則輸出全部字符。
cin.peek()//返回輸入流的下一個字符,但是不提取它。
long(a)//a可以是指針地址,作用,強(qiáng)制轉(zhuǎn)換為十進(jìn)制數(shù)。
(void*)//ex:char str="abcde";cout<<str;將str為首地址字符串的首地址輸出。
18.輸入符,提取符重載:<<? >>
???? 例154 155例題
19.磁盤文件的輸入。頭文件#include"fstream.h"? //例題從156開始
??? 1.打開文件:
???????? a.?? fstream outfile;
????????????? outfile.open("f1.txt",ios::out);//其中fstream為系統(tǒng)對文件專用操作類
???????? b.?? ofstream ostream("f1.txt");
????????????? ofstream ostrm;? ostrm.open("f1.txt");//表示打開某個寫文件
???????? c.?? ifstream istrm("f2.txt");
????????????? ifstream istrm;? istrm.open("f2.txt");//表示打開某個讀文件
????? -----------------------------------------------------------------------
????????????????? 方式名????????????? |??????????? 用途
????? ----------------------------------------------------------------------
?????????????????? in???????????????? |???????? 以輸入方式打開文件
????? -----------------------------------------------------------------------
?????????????????? out??????????????? |???????? 以輸出方式打開文件
????? -----------------------------------------------------------------------??
???? app??????????????? |???????? 以輸出追加方式打開文件
????? -----------------------------------------------------------------------
???????????????? ate??????????????? |???????? 文件打開時,文件指針位于文件尾
????? -----------------------------------------------------------------------
?????????????????? trunc????????????? |? 如果文件存在,將其長度截斷為零,并清除所有內(nèi)容,如果文件不存在,則創(chuàng)建新文件
????? -----------------------------------------------------------------------
?????????????????? binarg???????????? |?? 以二進(jìn)制方式打開文件,缺省時為文本方式
????? -----------------------------------------------------------------------
?????????????????? nocreate?????????? |打開一個已有文件,如該文件不存在,則打開失敗
????? -----------------------------------------------------------------------
?????????????????? noreplace????????? |如果文件存在,除非設(shè)置 ios::ate或ios::app,否則打開失敗
????? -----------------------------------------------------------------------
?????????????????? ios::in |ios::out? |以讀和寫的方式打開文件
????? -----------------------------------------------------------------------
???????????????? ios::out|ios::binary |以二進(jìn)制方式打開文件
????? -----------------------------------------------------------------------
???????????????? ios::in|ios::binary? |以二進(jìn)制方式打開文件
????? -----------------------------------------------------------------------
??? 2. 關(guān)閉文件:
????????????? fstream outfile;
????????????? outfile.close();??
??? 3. 打開文件失敗退出程序:用函數(shù)abort();退出,在頭文件<stdlib.h"
??? 4.判斷文件結(jié)束函數(shù).example:? infile.eof()
??? 5.getline(char*,sizeof(s));//讀取一串字符
????? get()/put()//對文件字符操作,例如outfile.get??
??? 6.隨機(jī)訪問數(shù)據(jù)文件:
??????? 1)讀指針
????????? istream &istream::seekg(流中位置)//
????????? istream &istream::seekg(偏移量,參照位置)//參照位置分為:cur=1/beg=0/end=2? input.seekg(-100,ios::cur);
????????? streampos istream::tellg();//其中streampos定義為long型,它返回一個long型且值為當(dāng)前指針離文件開頭的位置(字節(jié)數(shù))
??????? 2)寫指針
????????? ostream &ostream::seekp(流中的位置)
????????? ostream &ostream::seekp(偏移量,參照位置)//參照位置同上
????????? streampos ostream::tellp();
???? 注意:讀函數(shù)中有g(shù)et(),寫函數(shù)中有put(),操作讀指針用seekg(),而寫指針用seekp();write()和read()中的第一個參數(shù)必須為(char *),如果不是,一定要強(qiáng)制轉(zhuǎn)換
??? 7.? while(!cin);//表示輸入流有錯。
??????? cin.clear();//原型 void ios::clear(int=0);其用途是將錯誤狀態(tài)的標(biāo)志字中錯誤標(biāo)志位清除,重新判斷輸入。
??????? cin.ignor(80,ch);//如果ch='\n',一般表示忽略一行,重新到下一行去輸入
??????? istream &istream::ignore(int n=1,int t=EOF);//跳過輸入流中指定數(shù)量的字符的函數(shù),t為終止符,一般EOF相當(dāng)于<ctrl+z>操作
??????? istream &istream::pubback(char ch)//退回一個字符到輸入流的函數(shù),其中ch是指出要退回輸入流的字符。
20. 格式化輸入和輸出:??????? 例題從 167開始
???? A.設(shè)置流的格式化標(biāo)志
??????? 1).控制格式的標(biāo)志位
???????? ------------------------------------------------------------------------------
?????????? 標(biāo)志位 |?? 值?? |??????????????????????????? 含義?????????????? |輸入/輸出
???????? ------------------------------------------------------------------------------
????????? skipws? | 0x0001 |???????????????? 跳過輸入中的空白符???????????????? |??? i
???????? ------------------------------------------------------------------------------
?????????? left?? | 0x0002 |???????????????? 輸出數(shù)據(jù)左對齊???????????????????? |??? o
???????? ------------------------------------------------------------------------------
????????? rignt?? | 0x0004 |???????????????? 輸出數(shù)據(jù)右對齊???????????????????? |??? o
???????? ------------------------------------------------------------------------------
???????? internal | 0x0008 |?? 數(shù)據(jù)的符號左對齊,數(shù)據(jù)本身右對齊,之間為填充符?? |??? o
???????? ------------------------------------------------------------------------------
?????????? dec??? | 0x0010 |????????????? 轉(zhuǎn)換基數(shù)為十進(jìn)制形式????????????????? |?? i/o
???????? ------------------------------------------------------------------------------
?????????? oct??? | 0x0020 |????????????? 轉(zhuǎn)換基數(shù)為八進(jìn)制形式????????????????? |?? i/o
???????? ------------------------------------------------------------------------------
?????????? hex??? | 0x0040 |???????????? 轉(zhuǎn)換基數(shù)為十六進(jìn)制形式???????????????? |?? i/o
???????? ------------------------------------------------------------------------------
???????? showbase | 0x0080 |??????????????? 輸出數(shù)據(jù)前有0/0x??????????????????? |??? o
???????? ------------------------------------------------------------------------------
??????? showpoint | 0x0100 |????????????? 浮點(diǎn)數(shù)輸出帶有小數(shù)點(diǎn)????????????????? |??? o
???????? ------------------------------------------------------------------------------
??????? uppercase | 0x0200 |?????????? 用大寫字母輸出十六進(jìn)制數(shù)值?????????????? |??? o
???????? ------------------------------------------------------------------------------
???????? showpos? | 0x0400 |?????????????? 正數(shù)前面有“+”號??????????????????? |??? o
???????? ------------------------------------------------------------------------------
??????? scientfic | 0x0800 |??????????? 浮點(diǎn)數(shù)輸出采用科學(xué)表示法??????????????? |??? o
???????? ------------------------------------------------------------------------------
????????? fixed?? | 0x1000 |??????????? 使用定點(diǎn)數(shù)形式表示浮點(diǎn)數(shù)??????????????? |??? o
???????? ------------------------------------------------------------------------------
???????? unitbuf? | 0x2000 |??????? 完成輸入操作后立即刷新流的緩沖區(qū)??????????? |??? o
???????? ------------------------------------------------------------------------------
????????? stdio?? | 0x4000 |???????? 完成輸入操作后刷新系統(tǒng)的stdout???????????? |??? o
???????? ------------------------------------------------------------------------------????
?????? 2).使用成員函數(shù)設(shè)置標(biāo)志字:
?????????? 1.long flags()?????? //該函數(shù)用來返回標(biāo)志字
?????????? 2.long flags(long)?? //該函數(shù)使用參數(shù)更新標(biāo)志字,返回更新前的標(biāo)志字
?????????? 3.long setf(long setbits,long field)//將field所指定的標(biāo)志清零,將setbits為1的位置1,返回以前的標(biāo)志字
?????????? 4.long setf(long)? //設(shè)置參數(shù)所指定的那些標(biāo)志的位,返回更新前的標(biāo)志字
?????????? 5.long unsetf(long)//該函數(shù)用來清除參數(shù)所指定的那些標(biāo)志位的位,返回更新前的標(biāo)志字
??????? 在ios類中,定義了下面的表態(tài)類對象;
?????????? static const long? basefield; //其值為dec/oct/hex
?????????? static const long adjustfield //其值為left/right/internal
?????????? static const long? floatfield //其值為scientific/fixed
??????? example:? cin.setf(ios::dec,ios::basefield??????
??? B.格式輸出函數(shù):
?????? 1).設(shè)置輸出數(shù)據(jù)所占寬度的函數(shù)
?????????? 1.int width()//該函數(shù)返回當(dāng)前輸出數(shù)據(jù)的寬度
?????????? 2.int width(int)//刻函數(shù)用來設(shè)置當(dāng)前輸出數(shù)據(jù)的寬度為參數(shù)值,并返回更新前的寬度值
?????? 2).填充當(dāng)前寬度內(nèi)的填充字符函數(shù)
?????????? 1.char fill()//該函數(shù)用來返回當(dāng)前所使用的填充字符
?????????? 2.char fill(char)//該函數(shù)用來設(shè)置填充字符為參數(shù)值所表示的字符,并返回更新前的填充字符
?????? 3).設(shè)置浮點(diǎn)數(shù)輸出精度函數(shù)
?????????? 1.int precision()//該函數(shù)返回當(dāng)前浮點(diǎn)數(shù)的有效數(shù)字的個數(shù)
?????????? 2.int precision(int)//該函數(shù)設(shè)置浮點(diǎn)數(shù)輸出時的有效數(shù)字個數(shù),并返回更新前的值。
????? 注意:float型實(shí)數(shù)最多提供7位有效數(shù)字,double型褸最多提供15位有效數(shù)字,long。。。提供19位有效數(shù)字
?? C.操作子:為了簡化操作,提供了一系列操作子,操作子實(shí)際上是對象
?????? --------------------------------------------------------------------
??????? dec???????? |????? 數(shù)值數(shù)據(jù)采用十進(jìn)制表示?????????????? |??? i/o
?????? --------------------------------------------------------------------
??????? hex???????? |????? 數(shù)值數(shù)據(jù)采用十六進(jìn)制表示???????????? |??? i/o
?????? --------------------------------------------------------------------
??????? oct???????? |????? 數(shù)值數(shù)據(jù)采用八進(jìn)制表示?????????????? |??? i/o
?????? --------------------------------------------------------------------
??????? setbase(int)|? 設(shè)置數(shù)據(jù)轉(zhuǎn)換基數(shù)為n(n為0,8,10,16),其中0表示缺省基數(shù)? |? i/o
?????? --------------------------------------------------------------------
??????? ws????????? |?? 提取空白符????????????????????????????? |???? i
?????? --------------------------------------------------------------------
??????? ends??????? |?? 插入空白符????????????????????????????? |???? o
?????? --------------------------------------------------------------------
??????? flush?????? |? 刷新與流相關(guān)聯(lián)的緩沖區(qū)?????????????????? |???? o
?????? --------------------------------------------------------------------
??????? resetiosflags(long)? |???? 清除參數(shù)所指定的標(biāo)志位?????? |??? i/o
?????? --------------------------------------------------------------------
??????? setiosflags(long)??? |???? 設(shè)置參數(shù)所指定的標(biāo)志位?????? |??? i/o
?????? --------------------------------------------------------------------
??????? setfill(int)???????? |???? 設(shè)置填充字符???????????????? |???? o
?????? --------------------------------------------------------------------
??????? setsprecision(int)?? |???? 設(shè)置浮點(diǎn)數(shù)輸出的有效數(shù)字個數(shù) |???? o
?????? --------------------------------------------------------------------
??????? setw(int)??????????? |???? 設(shè)置輸出數(shù)據(jù)項(xiàng)的域?qū)???????? |???? o
?????? --------------------------------------------------------------------
21. 字符串流:例170開始
????? c++提供了兩個類:頭文件#include"strstrea.h"
???????? 1.ostrstream:其是從ostream派生來的,將不同類型轉(zhuǎn)換為字符串,并存放到數(shù)組中.
???????????? ostrstream::ostrstream();//缺省構(gòu)造函數(shù),它用來建立存儲所插入的數(shù)據(jù)的數(shù)組對象;
???????????? ostrstream::ostrstream(char *s,int n,int mode=ios::out);//此構(gòu)造函數(shù)中S是字符指針或字符數(shù)組,N是用來指定這個數(shù)組最多能存放的字符個數(shù).mode參數(shù)給出流式的方式,缺省為out方式,還可選用ate和app方式.
?????????? ostrstream類還提供了如下的成員函數(shù):
???????????? int ostrstream::pcount();//返回流中已插入的字符個數(shù);
???????????? char *ostrstream::str(); //返回標(biāo)志字符串的數(shù)組的指針值;
???????? 2.istrstream:其是從istream派生來的,將文本項(xiàng)轉(zhuǎn)換為變量所需要的內(nèi)部格式.?????
???????????? istrstream::istrstream(char *s);//構(gòu)造函數(shù)中S是一個字符指針或字符數(shù)組,使用該串來初始化要創(chuàng)建的流對象
???????????? istrstream::istrstream(char *s,int n);//此構(gòu)造函數(shù)是使用串中前N個字符來構(gòu)造串對象
22.異常處理
????? try{?? }
????? throw 變量
????? catch(形式參數(shù)變量){?? } //其中形數(shù)參數(shù)變量只能是一個,且類型不能像函數(shù)傳遞形參那樣進(jìn)行自動轉(zhuǎn)換,必須完全批配
?? 注意:1.當(dāng)找不到指導(dǎo)配項(xiàng)時,就用黑認(rèn)批配項(xiàng)abort()一終止程序???????????????
???????? 2.異常處理的數(shù)據(jù)類型是公有基類,拋擲異常的數(shù)據(jù)類型是派生類
???????? 3.異常處理的數(shù)據(jù)類型是指向公有基類的指針,拋擲異常的數(shù)據(jù)類型是指向派生類的指針
??????????? catch(基類)總能夠捕獲throw(派生類對象),所以catch(基類)塊總是放在catch(派生類)塊的后面,以避免catch(派生類)永遠(yuǎn)不能捕獲異常?????????????????????????????????