




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第九章從C到C++9.1C++對(duì)C的一般擴(kuò)充9.2C++中的函數(shù)9.3C++的輸入與輸出流9.4小結(jié)9.1C++對(duì)C的擴(kuò)充
C++在C語(yǔ)言標(biāo)識(shí)符的基礎(chǔ)上,增加了許多標(biāo)識(shí)符,下面列出常用的標(biāo)識(shí)符。
asmcatchclassdelete
friendinlinenewoperator
privateprotectedpublictemplatevirtual特別注意,在將原來(lái)用C語(yǔ)言寫(xiě)的程序用C++編譯之前,應(yīng)把與上述關(guān)鍵字同名的標(biāo)識(shí)符改名。9.1.1新增的關(guān)鍵字9.1.2注釋在C語(yǔ)言中,我們用“/*”及“*/”作為注釋分界符號(hào),C++除了保留這種注釋方式外,還提供了一種更有效的注釋方式,即用“//”導(dǎo)引出單行注釋。例如:
intx;/*定義一個(gè)整型變量*/
intx;//定義一個(gè)整型變量這兩條語(yǔ)句是等價(jià)的。C++的“//…”注釋方式特別適合于注釋內(nèi)容不超過(guò)一行的注釋?zhuān)@使語(yǔ)句顯得很簡(jiǎn)潔。9.1.3類(lèi)型轉(zhuǎn)換C++支持兩種不同的類(lèi)型轉(zhuǎn)換形式:
inti=0;
longl=(long)I;//C的類(lèi)型轉(zhuǎn)換
longm=long(i);//C++的新風(fēng)格C++新風(fēng)格的類(lèi)型轉(zhuǎn)換形式看上去象是一個(gè)函數(shù)調(diào)用,所以可讀性較好。而且,這種形式也適合于用戶(hù)定義類(lèi)型的轉(zhuǎn)換(用定義函數(shù)來(lái)實(shí)現(xiàn))。9.1.4靈活的變量聲明在C語(yǔ)言中,局部變量說(shuō)明必須置于可執(zhí)行代碼段之前,不允許局部變量說(shuō)明和可執(zhí)行代碼混合起來(lái)。但在C++中,允許在代碼塊的任何地方說(shuō)明局部變量,也就是說(shuō),變量可以放在任何語(yǔ)句位置,不必非放在程序段的開(kāi)始處。例如:voidf(){
inti;
i=1;
intj;
j=2;
//…}
這樣,可以隨用隨定義,這也是C++封裝的要求,易讀性也好。而且在遠(yuǎn)離數(shù)據(jù)項(xiàng)被使用處的地方聲明,易引起混淆或?qū)е洛e(cuò)誤。9.1.5const1.const定義常量在C中,習(xí)慣使用#define來(lái)定義常量,例如:
#defineSIZE100;C++提供了一種更靈活、更安全的方式來(lái)定義變量,即使用類(lèi)型限定符const來(lái)表示常量。所以,C++中的常量可以是有類(lèi)型的,程序員不必再用#define創(chuàng)建無(wú)類(lèi)型常量。例如:
constintsize=100;聲明成const的變量,實(shí)際是常量,它有地址,可以用指針指向這個(gè)值,但在程序中是不可修改的。使用#define有時(shí)是不安全的,如下例所示?!纠?.1】使用#define引起的歧義。#include<iostream.h>voidmain(){ inta=1;#defineT1a+a #defineT2T1-T1 cout<<"T2is"<<T2<<endl;}初看程序,似乎應(yīng)輸出:T2is0但是實(shí)際的輸出結(jié)果是:T2is2【例9.2】使用const消除#define的不安全性。#include<iostream.h>voidmain(){ inta=1;constT1=a+a; constT2=T1-T1; cout<<"T2is"<<T2<<endl;}程序執(zhí)行結(jié)果如下:T2is02.const修飾指針 const還可以修飾指針的情況,例如:
intb=500; constint*a=&b;
① intconst*a=&
b;
② int*consta=&b;
③ constint*consta=&b;
④const修飾指針的情況可以有以上幾種形式,①和②的情況相同,都是指針?biāo)赶虻膬?nèi)容為常量,這種情況下不允許對(duì)指針指向的內(nèi)容進(jìn)行更改操作,如不能:*a=3;但是,由于a是一個(gè)指向常量的普通指針變量,不是常指針,因此可以改變a的值,例如下列語(yǔ)句是允許的:
intc=3; a=&c;上述③為指針本身是常量,即常指針,而指針?biāo)赶虻膬?nèi)容不是常量,這種情況下不能對(duì)指針本身進(jìn)行更改操作,例如:
a++;
//非法但是它指向的數(shù)據(jù)可以改變,例如:
*a=3;//合法 是可以的。上述④為指針本身和指向的內(nèi)容均為常量,均不能修改。不難理解以下兩個(gè)語(yǔ)句都是錯(cuò)誤的:
a++;
//非法
*a=3;//非法3.const在函數(shù)中的應(yīng)用const還常用來(lái)限定函數(shù)的參數(shù)和返回值。函數(shù)參數(shù)如果使用const聲明,說(shuō)明在函數(shù)中不能修改該參數(shù)。例如:
floatfun(constfloatx) {returnx*x;}//非法:x=x*x;如果函數(shù)返回基本類(lèi)型(如int和double),用const聲明返回值沒(méi)有特別的意義,但如果函數(shù)返回一個(gè)指針或引用(引用的概念在后面提及),則使用const聲明返回值表示調(diào)用函數(shù)時(shí)不能用返回值來(lái)改變返回值所指向或引用的變量。例如:
constint*fun() { staticintx=1; ++x; return&x; } voidmain() { inty; y=*fun();//合法:將值x賦值給y *fun()=2;//非法:不能改變一個(gè)常量的類(lèi)型 }9.1.6struct
C++的struct后的標(biāo)識(shí)符可看作是類(lèi)型名,所以定義某個(gè)變量比C中更加直觀。例如,在C中:
structpoint{intx;inty};structpointp;而在C++中:
structpoint{intx;inty};pointp;我們不必再寫(xiě)struct。對(duì)于union,也可以照此使用。9.1.7作用域分辨運(yùn)算符“::”“::”是作用域分辨運(yùn)算符,它用于訪問(wèn)在當(dāng)前作用域中被隱藏的數(shù)據(jù)項(xiàng)。如果有兩個(gè)同名變量,一個(gè)是全局的,另一個(gè)是局部的,那么局部變量在其作用域內(nèi)具有較高的優(yōu)先權(quán)?!纠?.3】局部變量在其作用域內(nèi)具有較高的優(yōu)先權(quán)。
#include<iostream.h>inta=10;//全局變量aintmain(){ inta;a=25;//局部變量a cout<<"ais"<<a<<endl;return0;}程序執(zhí)行結(jié)果如下:ais25【例9.4】使用域作用運(yùn)算符#include<iostream.h>inta;//全局變量aintmain(){ inta;a=25;//局部變量a ::a=10;//全局變量a cout<<"localis"<<a<<endl; cout<<"globalis"<<::a<<endl;return0;}程序執(zhí)行結(jié)果如下:localis25globalis109.1.8C++的動(dòng)態(tài)內(nèi)存分配C程序中,動(dòng)態(tài)內(nèi)存分配是通過(guò)調(diào)用malloc()和free()等庫(kù)函數(shù)來(lái)實(shí)現(xiàn)的,而C++給出了使用new
和delete運(yùn)算符進(jìn)行動(dòng)態(tài)內(nèi)存分配的新方法。例9.5用malloc()實(shí)現(xiàn)內(nèi)存分配。#include<stdio.h>#include<malloc.h>voidmain(){ int*p; p=(int*)malloc(sizeof(int)); *p=10; printf("%d",*p); free(p);}運(yùn)算符new用于內(nèi)存分配的使用形式為:
p=newtype;其中,type是一個(gè)數(shù)據(jù)類(lèi)型名,p是指向該數(shù)據(jù)類(lèi)型的指針。new從內(nèi)存中為程序分配一塊sizeof(type)字節(jié)大小的內(nèi)存,該塊內(nèi)存的首地址存于指針p中。運(yùn)算符delete用于釋放new分配的存儲(chǔ)空間,它的使用形式為:
deletep;其中,p必須是一個(gè)指針,保存著new分配的內(nèi)存的首地址。以下是C++程序中用新方法實(shí)現(xiàn)動(dòng)態(tài)內(nèi)存分配的例子。【例9.6】用new實(shí)現(xiàn)動(dòng)態(tài)內(nèi)存分配。#include<iostream.h>voidmain(){ int*i=newint;//為指針i分配存儲(chǔ)空間 *i=10; cout<<*i; deletei;//釋放i指向的存儲(chǔ)空間}說(shuō)明:(1)使用new可以為數(shù)組動(dòng)態(tài)分配存儲(chǔ)空間,這時(shí)需要在類(lèi)型名后綴上數(shù)組的大小。例如:int*p=newint[10];這時(shí)new為具有10個(gè)元素的整型數(shù)組分配了內(nèi)存空間,并將首地址賦給了指針p。
需要注意的是,使用new給多維數(shù)組分配空間時(shí),必須提供所有維的大小,如:
int*p=newint[2][3][4];其中第一維的界值可以是任何合法的表達(dá)式。
inti=3;int*p=newint[i][3][4];(2)new可以在為簡(jiǎn)單變量分配內(nèi)存的同時(shí),進(jìn)行初始化。例如:int*p=newint(99);new分配了一個(gè)整型內(nèi)存空間,并賦初始值99。但是,new不能對(duì)動(dòng)態(tài)分配的數(shù)組存儲(chǔ)區(qū)進(jìn)行初始化。(3)釋放動(dòng)態(tài)分配的數(shù)組存儲(chǔ)區(qū)時(shí),可用如下的delete格式:
delete[]p;(4)使用new動(dòng)態(tài)分配內(nèi)存時(shí),如果分配失敗,既沒(méi)有足夠的內(nèi)存空間滿(mǎn)足分配要求,new將返回空指針(NULL)。因此通常要對(duì)內(nèi)存的動(dòng)態(tài)分配是否成功進(jìn)行檢查。intmain(){
int*p=newint;//為指針p分配存儲(chǔ)空間
if(!p){cout<<"分配失敗"<<endl;return1;}*p=10;cout<<*p;deletep;//釋放p指向的存儲(chǔ)空間
return0;}9.1.9引用
在前面的章節(jié)中,我們學(xué)習(xí)了指針的概念,指針就是內(nèi)存單元的地址,它可能是變量的地址,也可能是函數(shù)的入口地址。這里看另外一個(gè)同指針相關(guān)的概念:引用。在引入引用的概念之前,我們先看一個(gè)例子?!纠?.7】值傳遞應(yīng)用#include<iostream.h>voidswap(intm,intn){ inttemp; temp=m; m=n; n=temp;}intmain(){ inta=5,b=10; cout<<"a="<<a;cout<<"b="<<b<<endl; swap(a,b); cout<<"a="<<a;
cout<<"b="<<b<<endl;
return0;}程序執(zhí)行結(jié)果如下:a=5b=10a=5b=10【例9.】8使用指針(地址)進(jìn)行值傳遞#include<iostream.h>voidswap(int*m,int*n){ inttemp; temp=*m; *m=*n; *n=temp;}intmain(){ inta=5,b=10;cout<<"a="<<a;cout<<"b="<<b<<endl; swap(&a,&b); cout<<"a="<<a;cout<<"b="<<b<<endl;return0;}程序執(zhí)行結(jié)果如下:a=5b=10a=10b=5引用是能自動(dòng)間接引用的一種指針。自動(dòng)間接引用就是不必使用間接引用運(yùn)算符*,就可以得到一個(gè)引用值。我們可以這樣理解,引用就是某一變量(目標(biāo))的一個(gè)別名,對(duì)引用的操作與對(duì)變量直接操作完全一樣。那么,在程序設(shè)計(jì)的時(shí)候,引用如何定義并使用呢?1.引用的定義定義引用的關(guān)鍵字是“type&”,它的含義是“type類(lèi)型的引用”,此引用與type類(lèi)型的對(duì)象或變量的地址相聯(lián)系。例如:
inti=5;int&j=i;它創(chuàng)建了一個(gè)整型引用,j是i的別名,i和j占用內(nèi)存同一位置。當(dāng)i變化時(shí),j也隨之變化,反之亦然。引用的初始值可以是一個(gè)變量或另一個(gè)引用,以下的定義也正確。
inti=5;int&j=i;int&j1=j;2.使用規(guī)則(1)定義引用時(shí),必須立即初始化。 inti; int&j;//錯(cuò)誤,沒(méi)有初始化 j=i;(2)引用不可重新賦值。 inti,k; int&j=i; j=&k;//錯(cuò)誤,重新賦值(3)引用不同于普通變量,下面的聲明是非法的:
int&b[3];//不能建立引用數(shù)組 int&*P;//不能建立指向引用的指針 int&&r;//不能建立指向引用的引用(4)當(dāng)使用&運(yùn)算符取一個(gè)引用的地址時(shí),其值為所引用的變量的地址。
intnum=50;int&ref=num;int*p=&ref;則p中保存的是變量num的地址?!纠?.9】引用傳遞#include<iostream.h>voidswap(int&m,int&n){ inttemp; temp=m; m=n; n=temp;}main(){inta=5,b=10;cout<<"a="<<a;cout<<"b="<<b<<endl;swap(a,b);cout<<"a="<<a;cout<<"b="<<b<<endl;return0;}程序執(zhí)行結(jié)果如下:a=5b=10a=10b=59.2C++中的函數(shù)C對(duì)main()函數(shù)的格式并無(wú)特殊規(guī)定,因?yàn)橥ǔ不關(guān)心返回何種狀態(tài)給操作系統(tǒng)。然而,C++卻要求main()函數(shù)匹配下面兩種原型之一。
voidmain() //無(wú)參數(shù),無(wú)返回類(lèi)型
intmain(intargc,char*argv[])
//帶參數(shù),有返回類(lèi)型,參數(shù)也可以省略。9.2.1主函數(shù)main
第二種main()函數(shù)中形參argc是命令行總的參數(shù)個(gè)數(shù),argv[]是大小為argc,其中第0個(gè)參數(shù)存儲(chǔ)的是程序的全名,其后存儲(chǔ)的是程序名后所帶的參數(shù)。
例如,包含第二種main()函數(shù)的程序test.exe,在命令行方式下執(zhí)行時(shí)輸入:
C:\>test
a.c
b.c
t.c
則
argc
=4,argv[0]="test",argv[1]
="a.c"
,argv[2]="b.c"
,argv[3]="t.c"。
如果main()前面不寫(xiě)返回類(lèi)型,那么main()等價(jià)于
intmain()
函數(shù)要求具有int返回類(lèi)型,如例9.9。9.2.2函數(shù)定義C++函數(shù)定義中的參數(shù)說(shuō)明必須放在函數(shù)名后的括號(hào)內(nèi),不可將函數(shù)參數(shù)說(shuō)明放在函數(shù)說(shuō)明部分與函數(shù)體之間,如:voidfun(a)inta;//錯(cuò)誤的參數(shù)說(shuō)明方式{}但在C中,這種說(shuō)明方法是允許的。9.2.3內(nèi)置函數(shù)函數(shù)調(diào)用導(dǎo)致了一定數(shù)量的額外開(kāi)銷(xiāo),如參數(shù)入棧、出棧等。有時(shí),正是這種額外開(kāi)銷(xiāo)迫使C程序員在整個(gè)程序中復(fù)制代碼以提高效率。C++的內(nèi)置函數(shù)正是為了解決這一問(wèn)題而提供的。當(dāng)函數(shù)定義是由inline開(kāi)頭時(shí),表明此函數(shù)為內(nèi)置函數(shù)。編譯時(shí),使用函數(shù)體中的代碼替代函數(shù)調(diào)用表達(dá)式,從而完成與函數(shù)調(diào)用相同的功能,這樣,能加快代碼的執(zhí)行,減少調(diào)用開(kāi)銷(xiāo)。例如:inlineintsum(inta,intb)//內(nèi)置函數(shù){returna+b;}說(shuō)明:①內(nèi)置函數(shù)必須在它被調(diào)用之前定義,否則編譯不會(huì)得到預(yù)想的結(jié)果。②若內(nèi)置函數(shù)較長(zhǎng),且調(diào)用太頻繁時(shí),程序?qū)⒓娱L(zhǎng)很多,通常只有較短的函數(shù)才定義為內(nèi)置函數(shù),較長(zhǎng)的函數(shù)最好作為一般函數(shù)處理。9.3.4缺省參數(shù)值
C++對(duì)C函數(shù)的一大重要的改進(jìn)之一就是可以為函數(shù)定義缺省的參數(shù)值。例如:
intfun(intx=5,inty=10);
//函數(shù)原型,給出缺省的參數(shù)值x與y的值分別是5和10。當(dāng)進(jìn)行函數(shù)調(diào)用時(shí),編譯器按從左向右順序?qū)?shí)參與形參結(jié)合,若未指定足夠的實(shí)參,則編譯器按順序用函數(shù)原型中的缺省值來(lái)補(bǔ)足所缺少的實(shí)參。例如:
fun(1,2);//x=1,y=2fun(1);//x=1,y=10fun();//x=5,y=10一個(gè)C++函數(shù)可以有多個(gè)缺省參數(shù),并且C++要求缺省參數(shù)必須連續(xù)的放在函數(shù)參數(shù)表的尾部,也就是說(shuō),所有取缺省值的參數(shù)都必須出現(xiàn)在不取缺省值的參數(shù)的右邊。當(dāng)調(diào)用具有多個(gè)缺省參數(shù)時(shí),若某個(gè)參數(shù)省略,則其后的參數(shù)皆應(yīng)省略而采用缺省值。當(dāng)不允許出現(xiàn)某個(gè)參數(shù)省略時(shí),再對(duì)其后的參數(shù)指定參數(shù)值。例如:
fun(,5)//這種調(diào)用方式是錯(cuò)誤的9.2.5函數(shù)重載在C語(yǔ)言中,函數(shù)名必須是唯一的,也就是說(shuō)不允許出現(xiàn)同名的函數(shù)。當(dāng)要求編寫(xiě)求整數(shù)、浮點(diǎn)數(shù)和雙精度浮點(diǎn)數(shù)的立方數(shù)的函數(shù)時(shí),若用C語(yǔ)言來(lái)處理,必須編寫(xiě)三個(gè)函數(shù),這三個(gè)函數(shù)的函數(shù)名不允許同名。例如:Icube(inti);//求整數(shù)的三次方Fcube(floatf);//求浮點(diǎn)數(shù)的三次方Dcube(doublei);//求雙精度浮點(diǎn)數(shù)的三次方在C++中,用戶(hù)可以重載函數(shù),這意味著,只要函數(shù)參數(shù)的類(lèi)型不同,或者參數(shù)的個(gè)數(shù)不同,兩個(gè)或兩個(gè)以上的函數(shù)可以使用相同的函數(shù)名。【例9.10】重載cube函數(shù)。#include<iostream.h>intcube(inti){returni*i*i;}floatcube(floatf){returnf*f*f;}doublecube(doubled){returnd*d*d;}intmain(){ inti=12; floatf=3.4; doubled=5.678; cout<<i<<'*'<<i<<'*'<<i<<'='<<cube(i)<<endl; cout<<f<<'*'<<f<<'*'<<f<<'='<<cube(f)<<endl; cout<<d<<'*'<<d<<'*'<<d<<'='<<cube(d)<<endl; return0;}值得注意,重載函數(shù)應(yīng)在參數(shù)個(gè)數(shù)或參數(shù)類(lèi)型上有所不同,否則編譯程序?qū)o(wú)法確定調(diào)用哪一個(gè)重載版本,即使返回類(lèi)型不同,也不能區(qū)分。例如:intfun(intx,inty);doublefun(intx,inty);其重載函數(shù)的參數(shù)個(gè)數(shù)類(lèi)型相同,是錯(cuò)誤的。另外,同函數(shù)名同參數(shù)表的const和非const成員函數(shù)也可構(gòu)成重載。例如:
intmyclass::fun(inta,intb);intmyclass::fun(inta,intb)const;9.3C++的輸入與輸出流大家都知道C語(yǔ)言提供了強(qiáng)有力的I/O函數(shù),其功能強(qiáng),靈活性好,是很多語(yǔ)言無(wú)法比擬的。但是,在C語(yǔ)言中進(jìn)行I/O操作時(shí),常會(huì)出現(xiàn)以下錯(cuò)誤:
inti; floatf; scanf("%f",i); /*i是int型,"%f"應(yīng)該是"%d",i應(yīng)該是&i*/ printf("%d",f); /*f是float型,"%d"應(yīng)該是"%f"*/cin使用C++的I/O系統(tǒng),可以將上面的操作寫(xiě)成: inti; floatf; cin>>i; cout<<f;這里的cin是標(biāo)準(zhǔn)的輸入流,在程序中用于代表標(biāo)準(zhǔn)輸入設(shè)備,即鍵盤(pán)。運(yùn)算符“>>”是輸入運(yùn)算符,表示從標(biāo)準(zhǔn)輸入流(即鍵盤(pán))讀取的數(shù)值傳送給右方指定的變量。運(yùn)算符“>>”允許用戶(hù)連續(xù)讀入一連串?dāng)?shù)據(jù),兩個(gè)數(shù)據(jù)間用空格、回車(chē)或Tab鍵分隔。例如:
cin>>x>>y;coutcout是標(biāo)準(zhǔn)的輸出流,在程序中用于代表標(biāo)準(zhǔn)輸出設(shè)備,通常指屏幕。運(yùn)算符“<<”是輸出運(yùn)算符,表示將右方變量的值顯示到屏幕上。運(yùn)算符“<<”允許用戶(hù)連續(xù)輸出數(shù)據(jù)。例如:cout<<x<<y;這里的變量應(yīng)該是基本數(shù)據(jù)類(lèi)型,不能是void型。為了支持類(lèi)的概念,C++系統(tǒng)建立了一個(gè)可擴(kuò)展的輸入輸出系統(tǒng),它可以通過(guò)修改和擴(kuò)展來(lái)加入用戶(hù)自定義類(lèi)型并進(jìn)行相應(yīng)操作。例如,在C語(yǔ)言中有下面結(jié)構(gòu)類(lèi)型變量的定義: structpoint { intx,y; }a;這里,無(wú)法延伸C語(yǔ)言的I/O系統(tǒng),使之直接在變量a上執(zhí)行I/O操作,如下面的用法是錯(cuò)誤的:
printf("%point",a);9.3.1C++的流類(lèi)結(jié)構(gòu)雖然,C++語(yǔ)言和C語(yǔ)言的I/O系統(tǒng)有著顯著的差異,但它們也有著共同之處,即都是對(duì)流(tream)進(jìn)行操作。流實(shí)際上就是一個(gè)字節(jié)序列。輸入操作中,字節(jié)從輸入設(shè)備(如鍵盤(pán)、磁盤(pán)、網(wǎng)絡(luò)連接等)流向內(nèi)存;輸出操作中,字節(jié)從內(nèi)存流向輸出設(shè)備。使用C++的I/O的系統(tǒng)必須包含頭文件iostream.h,對(duì)某些流函數(shù)可能還需要其他頭文件,例如進(jìn)行文件I/O時(shí)需要頭文件fstream.h。1.iostream庫(kù)iostream庫(kù)中具有streambuf和ios兩個(gè)平行的類(lèi),這都是基本的類(lèi),分別完成不同的工作。streambuf類(lèi)提供基本流操作,但不提供格式支持。ios類(lèi)為格式化I/O提供基本操作。2.標(biāo)準(zhǔn)流iostream.h說(shuō)明了標(biāo)準(zhǔn)流對(duì)象cin、cout、cerr與clog。cin是標(biāo)準(zhǔn)輸入流,對(duì)應(yīng)于C語(yǔ)言的stdin;cout是標(biāo)準(zhǔn)輸出流,對(duì)應(yīng)于C語(yǔ)言的stdout;cerr是標(biāo)準(zhǔn)出錯(cuò)信息輸出,clog是帶緩沖的標(biāo)準(zhǔn)出錯(cuò)信息輸出。cerr和clog流被連到標(biāo)準(zhǔn)輸出設(shè)備上,對(duì)應(yīng)于C語(yǔ)言的stderr。cerr和clog之間的區(qū)別是cerr沒(méi)有緩沖,發(fā)送給它的任何輸出立即被執(zhí)行,而clog只有當(dāng)緩沖區(qū)滿(mǎn)時(shí)才有輸出。缺省時(shí),C++語(yǔ)言標(biāo)準(zhǔn)流被連到控制臺(tái)上。9.3.2格式化I/O1.狀態(tài)標(biāo)志字enum{skipws=0x0001,left=0x0002, right=0x0004,internal=0x0008, dec=0x0010,oct=0x0020, hex=0x0040,showbase=0x0080, showpoint=0x0100, uppercase=0x0200,showpos=0x0400, scientific=0x0800, fixed=0x1000,unitbuf=0x2000, stdio=0x4000, }2.ios類(lèi)中用于控制輸入輸出格式的成員函數(shù)
(1)設(shè)置狀態(tài)標(biāo)志setf(longflags)。(2)清除狀態(tài)標(biāo)志unsetf()。(3)取狀態(tài)標(biāo)志flags()。(4)設(shè)置域?qū)抴idth()。(5)設(shè)置顯示的精度precision(intnum);(6)填充字符fill()?!纠?.11】設(shè)置狀態(tài)標(biāo)志。#include<iostream.h>voidmain(){ cout.setf(ios::showpos|ios::scientific); cout<<123<<""<<123.456<<endl; }【例9.12】使用ios類(lèi)中用于控制輸入輸出格式的成員函數(shù)#include<iostream.h>voidmain(){ cout<<"x_width="<<cout.width()<<endl; cout<<"x_fill="<<cout.fill()<<endl; cout<<"x_precision="<<cout.precision()<<endl; cout<<123<<""<<123.45678<<endl; cout<<"-------------------------"<<endl;
cout<<"****x_width=10,x_fill=&,x_precision=4****"<<endl; cout.fill('&'); cout.width(10);cout.setf(ios::scientific); cout.precision(4); cout<<123<<""<<123.45678<<endl; cout.setf(ios::left); cout.width(10); cout<<123<<""<<123.45678<<endl; cout<<"x_width="<<cout.width()<<endl; cout<<"x_fill="<<cout.fill()<<endl; cout<<"x_precision="<<cout.precision()<<endl;}3.用操作子進(jìn)行格式化C++流類(lèi)庫(kù)所定義操作子如下:dec,hex,oct:數(shù)值數(shù)據(jù)采用十進(jìn)制、十六進(jìn)制、八進(jìn)制表示,可用于輸入或輸出。ws:提取空白符,僅用于輸入。endl:插入一個(gè)換行符并刷新輸出流,僅用于輸出。ends:插入空字符,僅用于輸出。flush:刷新與流相關(guān)聯(lián)的緩沖區(qū),僅用于輸出。setbase(intn):設(shè)置數(shù)值轉(zhuǎn)換基數(shù)為n(n的取值為0、8、10、16),0表示使用缺省基數(shù),
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 商務(wù)合同續(xù)簽協(xié)議書(shū)
- 項(xiàng)目代建協(xié)議合同
- 居民采暖供用熱合同
- 委托船舶單項(xiàng)其它工程服務(wù)合同
- 設(shè)計(jì)類(lèi)合同協(xié)議
- 墻地磚勞務(wù)分包合同
- 美容院顧客服務(wù)效果免責(zé)協(xié)議
- 搬遷協(xié)議搬遷運(yùn)輸合同
- 供應(yīng)商協(xié)議書(shū)范本
- 水質(zhì)檢測(cè)合同
- 潮汕民俗文化科普知識(shí)講座
- 睡眠障礙護(hù)理查房課件
- 某市經(jīng)濟(jì)技術(shù)開(kāi)發(fā)區(qū)改革創(chuàng)新發(fā)展實(shí)施方案
- 應(yīng)急物資的采購(gòu)、存儲(chǔ)與調(diào)配
- 超融合架構(gòu)與傳統(tǒng)架構(gòu)對(duì)比解析方案
- 少兒美術(shù)課件- 9-12歲 素描班《場(chǎng)景素描》
- 剪映:手機(jī)短視頻制作-配套課件
- 金融工程.鄭振龍(全套課件560P)
- 國(guó)家二級(jí)公立醫(yī)院績(jī)效考核醫(yī)療質(zhì)量相關(guān)指標(biāo)解讀
- 血液透析的醫(yī)療質(zhì)量管理與持續(xù)改進(jìn)
- GA/T 2073-2023法庭科學(xué)血液中碳氧血紅蛋白檢驗(yàn)分光光度法
評(píng)論
0/150
提交評(píng)論