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