C++從零單排(1)-基礎(chǔ)知識一

最近發(fā)現(xiàn)一個挺有意思的東西,一問一答-http://wenda60.com/。

為延邊朝鮮族等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及延邊朝鮮族網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站設(shè)計制作、網(wǎng)站設(shè)計、延邊朝鮮族網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

我這水平也就敢沖一下C++了,下面是一些記錄。


默認this指針

this指針是一個特殊的指針,當(dāng)類的某個非靜態(tài)的成員函數(shù)在執(zhí)行時,就會存在this指針。它指向類的一個對象,且這個對象的某個成員函數(shù)正在被調(diào)用。
this指針的名字始終是this,而且總是作為隱含參數(shù)傳遞給每一個被聲明的成員函數(shù)。

實際編程時函數(shù)的聲明不需要包含這個參數(shù)。

當(dāng)程序中調(diào)用某個對象的成員函數(shù)時,編譯器會把該對象的地址加入到參數(shù)列表中。

靜態(tài)成員函數(shù)不存在this指針。

當(dāng)調(diào)用某個對象的成員函數(shù)時,編譯器把對象的地址傳遞給this指針,然后再調(diào)用該函數(shù)。因此,成員函數(shù)你對任何成員的調(diào)用實際上都隱式地使用了this指針。


類的繼承規(guī)則

派生類共有三種C++類繼承方式:公有繼承(public),私有繼承(private),保護繼承(protected)

公有繼承(public)

基類的公有成員和保護成員可以作為其派生類的公有成員和保護成員

派生類的成員函數(shù)可以訪問基類中的公有成員和保護成員,無法訪問基類中的私有成員

派生類的對象可以訪問基類的公有成員

私有繼承(private)

基類的公有成員和保護成員都作為其派生類的私有成員

在私有繼承時,基類的成員只能由直接派生類訪問,而無法再往下繼承

保護C++類繼承(protected)

基類的所有公有成員和保護成員都成為派生類的保護成員

基類的公有成員和保護成員只能被它的直接派生類成員函數(shù)或友元訪問

構(gòu)造函數(shù)和析構(gòu)函數(shù)不能被繼承

因此構(gòu)造派生類的對象時,需要對基類數(shù)據(jù)成員.新增數(shù)據(jù)成員和成員對象的數(shù)據(jù)成員進行初始化

派生類構(gòu)造函數(shù)的參數(shù)表部分既需要包含子類某些數(shù)據(jù)成員的初始值,也要包含基類的數(shù)據(jù)成員的初始值

如果基類沒有默認的構(gòu)造函數(shù),那么派生類必須具有給基類構(gòu)造函數(shù)提供參數(shù)的構(gòu)造函數(shù)


數(shù)組指針和指針數(shù)組

--------------指針----------------
int a=10;
int *p=&a;

-------------指針的指針-----------
int b=20;
int *p=&b;
int **p2p=&p;

-------------簡單數(shù)組-----------------
int c[10];//整數(shù)數(shù)組,含有10個整數(shù)元素
也就是說每一個元素都是整數(shù)

--------------指針數(shù)組--------------------
int *p[10];//指針數(shù)組,含有10個指針元素
也就是說每一個元素都是指針

--------------數(shù)組指針--------------------
int (*p)[10];//數(shù)組指針,這個指針可以用來指向
含有10個元素的整數(shù)數(shù)組


虛基類

虛基類的作用從上面的介紹可知:如果一個派生類有多個直接基類,而這些直接基類又有一個共同的基類,則在最終的派生類中會保留該間接共同基類數(shù)據(jù)成員的多份同名成員。

在引用這些同名的成員時,必須在派生類對象名后增加直接基類名,以避免產(chǎn)生二義性,使其惟一地標(biāo)識一個成員,如
c1.A::display( )。
在一個類中保留間接共同基類的多份同名成員,這種現(xiàn)象是人們不希望出現(xiàn)的。C++提供虛基類(virtual base class )的方法,使得在繼承間接共同基類時只保留一份成員。


虛基類并不是在聲明基類時聲明的,而是在聲明派生類時,指定繼承方式時聲明的。因為一個基類可以在生成一個派生類時作為虛基類,而在生成另一個派生類時不作為虛基類。

聲明虛基類的一般形式為
class 派生類名: virtual 繼承方式 基類名
經(jīng)過這樣的聲明后,當(dāng)基類通過多條派生路徑被一個派生類繼承時,該派生類只繼承該基類一次。

需要注意: 為了保證虛基類在派生類中只繼承一次,應(yīng)當(dāng)在該基類的所有直接派生類中聲明為虛基類。否則仍然會出現(xiàn)對基類的多次繼承。

如果在派生類B和C中將類A聲明為虛基類,而在派生類D中沒有將類A聲明為虛基類,則在派生類E中,雖然從類B和C路徑派生的部分只保留一份基類成員,但從類D路徑派生的部分還保留一份基類成員。

使用多重繼承時要十分小心,經(jīng)常會出現(xiàn)二義性問題。許多專業(yè)人員認為:不要提倡在程序中使用多重繼承,只有在比較簡單和不易出現(xiàn)二義性的情況或?qū)嵲诒匾獣r才使用多重繼承,能用單一繼承解決的問題就不要使用多重繼承。也是由于這個原因,有些面向?qū)ο蟮某绦蛟O(shè)計語言(如Java,Smalltalk)并不支持多重繼承。


純虛函數(shù)

定義一個函數(shù)為虛函數(shù),不代表函數(shù)為不被實現(xiàn)的函數(shù)。定義他為虛函數(shù)是為了允許用基類的指針來調(diào)用子類的這個函數(shù)。
定義一個函數(shù)為純虛函數(shù),才代表函數(shù)沒有被實現(xiàn)。定義他是為了實現(xiàn)一個接口,起到一個規(guī)范的作用,規(guī)范繼承這個。類的程序員必須實現(xiàn)這個函數(shù)。

包含純虛函數(shù)的類稱為抽象類,不能初始話為對象。


break,continue和return

break

位置:只能用在switch語句和循環(huán)語句中。

作用:跳出switch語句或提前終止循環(huán),轉(zhuǎn)去執(zhí)行switch語句或循環(huán)語句之后的語句。

應(yīng)用:多用于提前結(jié)束循環(huán)(包括省略形式的for循環(huán)),以避免死循環(huán)。


continue

位置:只能用在循環(huán)語句中。

作用:終止本次循環(huán),即跳過其后尚未執(zhí)行的循環(huán)體語句,并開始下一次循環(huán)。

區(qū)別:與break語句的區(qū)別是:continue語句結(jié)束本次循環(huán),而break語句是結(jié)束整個循環(huán)。


return

位置:函數(shù)內(nèi)部

return語句有兩種形式:

return;

return expression;

不帶返回值的return語句只能用于返回類型為void的函數(shù),return語句是為了引起函數(shù)的強制結(jié)束,這種用法類似于循環(huán)結(jié)構(gòu)中的break語句的作用。

返回類型為void的函數(shù)通常不能使用第二種形式的return語句,便是,它可以返回另一個返回類型同樣是void的函數(shù)的調(diào)用

任何返回類型不是void的函數(shù)都必須返回一個值,而且這個返回值的類型必須和函數(shù)的返回類型相同,或者能隱式轉(zhuǎn)化為函數(shù)的返回類型。

盡管C++不能確保結(jié)果的正確性,便能保證函數(shù)每一次return都返回適當(dāng)類型的結(jié)果。


strlen和sizeof

char ss[100] = "0123456789";
sizeof(ss) 結(jié)果是100 ===》ss表示在內(nèi)存中的大小 100×1
strlen(ss) 結(jié)果是10 ===》strlen是個函數(shù)內(nèi)部實現(xiàn)是用一個循環(huán)計算到\0為止之前


char q[]="abc";
char p[]="a\n";
sizeof(q),sizeof(p),strlen(q),strlen(p);
結(jié)果是 4 3 3 2


類模板和函數(shù)模板

模板是實現(xiàn)代碼復(fù)用的一種工具,它可以實現(xiàn)類型參數(shù)化,把類型定義為參數(shù),實現(xiàn)代碼的真正復(fù)用。

模板分兩類:函數(shù)模板和類模板,用戶可使用他們來構(gòu)造模板函數(shù)或模板類。模板經(jīng)過實例化后就得到模板函數(shù)或模板類,模板函數(shù)或模板類再經(jīng)過實例化后就得到對象。

函數(shù)模板可以用來創(chuàng)建一個通用的函數(shù),以支持多種不同的形參,避免重載函數(shù)的函數(shù)體重復(fù)設(shè)計。它的最大特點是把函數(shù)使用的數(shù)據(jù)類型作為參數(shù)。

函數(shù)模板的數(shù)據(jù)類型參數(shù)標(biāo)識符實際上是一個類型形參,在使用函數(shù)模板時,要將這個形參實例化為確定的數(shù)據(jù)類型。將類型形參實例化的參數(shù)稱為模板實參,用模板實參實例化的函數(shù)稱為模板函數(shù)。模板函數(shù)的生成就是將函數(shù)模板的類型形參實例化的過程。


類模板也稱為類屬類或類生成類,是為類定義的一種模式,它使類中的一些數(shù)據(jù)成員和成員函數(shù)的參數(shù)或返回值可以取任意的數(shù)據(jù)類型。類模板不是一個具體的類,它代表著一族類,是這一族類的統(tǒng)一模式。使用類模板就是要將它實例化為具體的類。

將類模板的模板參數(shù)實例化后生成的具體的類,就是模板類。


ofstream、ifstream和fstream

ofstream: 寫操作(輸出)的文件類 (由ostream引申而來)
ifstream: 讀操作(輸入)的文件類(由istream引申而來)
fstream: 可同時讀寫操作的文件類 (由iostream引申而來)

ofstream, ifstream 和 fstream所有這些類的成員函數(shù)open 都包含了一個默認打開文件的方式,這三個類的默認方式各不相同:

類 參數(shù)的默認方式
ofstream ios::out | ios::trunc
ifstream ios::in
fstream ios::in | ios::out
只有當(dāng)函數(shù)被調(diào)用時沒有聲明方式參數(shù)的情況下,默認值才會被采用。如果函數(shù)被調(diào)用時聲明了任何參數(shù),默認值將被完全改寫,而不會與調(diào)用參數(shù)組合。


常數(shù)據(jù)成員

類中的常數(shù)據(jù)成員的初始化,只能通過成員初始化列表的方式來進行。

用const修飾的定義對象稱為常對象;
用const修飾的聲明成員函數(shù)稱為常成員函數(shù);
用const修飾的聲明數(shù)據(jù)成員稱為常數(shù)據(jù)成員。
變量或?qū)ο蟊?const修飾后其值不能被更新。因此被const修飾的變量或?qū)ο蟊仨氁M行初始化。

聲明方式:

const int cctwl;
int const cctwl;
int cctwl const; //這樣是錯誤的只能有以上兩種聲明形式。不能省略數(shù)據(jù)類型,可以添加 public private等訪問控制符


1.任何函數(shù)都不能對常數(shù)據(jù)成員賦值。
2. 構(gòu)造函數(shù)對常數(shù)據(jù)成員進行初始化時也只能通過初始化列表進行。
3. 常數(shù)據(jù)成員在初始化時必須賦值或稱其必須初始化.
4. 如果類有多個默認構(gòu)造函數(shù)必須都初始化常數(shù)據(jù)成員。


先記下這幾點,今天要沖到300分!

網(wǎng)頁標(biāo)題:C++從零單排(1)-基礎(chǔ)知識一
本文鏈接:http://muchs.cn/article28/jpeicp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、手機網(wǎng)站建設(shè)、云服務(wù)器、面包屑導(dǎo)航、網(wǎng)頁設(shè)計公司、軟件開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作