国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開(kāi)通VIP
C++基礎(chǔ)概念

  [參考書籍]  C++語(yǔ)言程序設(shè)計(jì)教程  作者:宋斌 曾春平 朱小谷
 
Ø 
const

const定義常量和#define定義常量的區(qū)別

1、const常量有數(shù)據(jù)類型,而宏常量沒(méi)有數(shù)據(jù)類型

2、有些集成化的調(diào)試工具可以對(duì)const常量進(jìn)行調(diào)試,但不能對(duì)宏常量進(jìn)行調(diào)試。

強(qiáng)烈建議在C++程序中使用const常量而不使用宏常量。

Ø  存儲(chǔ)類

1、auto(自動(dòng)的)

auto變量是用堆棧方式占用內(nèi)存空間的,擔(dān)當(dāng)程序執(zhí)行到變量所屬段外時(shí),內(nèi)存立即回收。

2、register(寄存的)

聲明register變量,它告訴編譯器,如果可能則將此變量保存在寄存器中,可以加快程序的速度。

3、static(靜態(tài)的)

C++中用固定的地址來(lái)保存靜態(tài)變量。只要程序在運(yùn)行,靜態(tài)變量就不會(huì)隨著運(yùn)行段的結(jié)束而消失。定義靜態(tài)變量必須進(jìn)行初始化。

4、extern(外部的)

外部變量的作用域是程序級(jí)的。即當(dāng)一個(gè)變量被定義為外部變量后,該程序中其他所有的函數(shù)或程序段都可以引用這個(gè)變量。由于它具有可同時(shí)被其他函數(shù)引用的特性,而且在程序運(yùn)行期間永不消失,因此可以用來(lái)在函數(shù)之間傳遞數(shù)據(jù)。

Ø  typedef

用來(lái)自定義數(shù)據(jù)類型。

Ø 

類是一種復(fù)雜的數(shù)據(jù)類型,它是將不同類型的數(shù)據(jù)和與這些數(shù)據(jù)相關(guān)的操作封裝在一起的集合體。

在類體中不允許對(duì)所定義的數(shù)據(jù)成員進(jìn)行初始化。

Ø  對(duì)象

類的實(shí)例

Ø  構(gòu)造函數(shù)

構(gòu)造函數(shù)是一種特殊的類成員函數(shù),它的作用是對(duì)類的數(shù)據(jù)成員進(jìn)行初始化和分配內(nèi)存。

特點(diǎn):

1、構(gòu)造函數(shù)可以重載。

2、在程序中不能顯示的調(diào)用構(gòu)造函數(shù),當(dāng)創(chuàng)建對(duì)象時(shí)構(gòu)造函數(shù)將自動(dòng)被調(diào)用。

3、構(gòu)造函數(shù)是成員函數(shù),函數(shù)體可以寫在類體內(nèi),也可以寫在類體外。

4、構(gòu)造函數(shù)是一個(gè)特殊的函數(shù),函數(shù)名與類名相同,該函數(shù)不指定類型說(shuō)明,它有隱含的返回值,該值由系統(tǒng)內(nèi)部使用。

5、運(yùn)算符new用于建立在生產(chǎn)期可控的對(duì)象,new返回指向所創(chuàng)建的對(duì)象的指針。new運(yùn)算符與構(gòu)造函數(shù)一同起作用,當(dāng)用new運(yùn)算符動(dòng)態(tài)創(chuàng)建對(duì)象時(shí),構(gòu)造函數(shù)將被自動(dòng)調(diào)用。

Ø  拷貝初始化構(gòu)造函數(shù)

拷貝初始化構(gòu)造函數(shù)是一種特殊的成員函數(shù),其功能是用一個(gè)已知的對(duì)象來(lái)初始化一個(gè)被創(chuàng)建的同類的對(duì)象。

特點(diǎn):

1、拷貝初始化構(gòu)造函數(shù)名和類名相同,因?yàn)樗彩且环N構(gòu)造函數(shù)。

2、拷貝初始化構(gòu)造函數(shù)只有一個(gè)參數(shù),并且是對(duì)某個(gè)對(duì)象的引用。

3、每個(gè)類都必須有一個(gè)拷貝初始化構(gòu)造函數(shù),如果類中沒(méi)有說(shuō)明拷貝初始化構(gòu)造函數(shù),則編譯器將自動(dòng)生成一個(gè)缺省的拷貝初始化構(gòu)造函數(shù),并作為該類的公有成員。

Ø  析構(gòu)函數(shù)

析構(gòu)函數(shù)也是一種特殊的類成員函數(shù),它的作用是釋放在構(gòu)造函數(shù)中分配的內(nèi)存空間。

特點(diǎn):

1、在一個(gè)類中只能定義一個(gè)析構(gòu)函數(shù),且不能重載。

2、析構(gòu)函數(shù)可以被顯示的聲明,也可以由系統(tǒng)自動(dòng)調(diào)用。

3、析構(gòu)函數(shù)是成員函數(shù),函數(shù)體可以寫在類體內(nèi),也可以寫在類體外。

4、當(dāng)一個(gè)對(duì)象是用new運(yùn)算符動(dòng)態(tài)創(chuàng)建時(shí)的,在使用delete運(yùn)算符釋放它時(shí),delete將自動(dòng)調(diào)用析構(gòu)函數(shù)。

Ø  內(nèi)聯(lián)函數(shù)

C++語(yǔ)言之所以引入內(nèi)聯(lián)函數(shù),主要是為了解決程序中函數(shù)調(diào)用的效率問(wèn)題。

內(nèi)聯(lián)函數(shù)和宏的比較:

1、對(duì)內(nèi)聯(lián)函數(shù)的調(diào)用是由編譯器進(jìn)行處理的,而對(duì)宏的調(diào)用是由預(yù)處理進(jìn)行擴(kuò)展的

2、內(nèi)聯(lián)函數(shù)調(diào)用時(shí),編譯器要檢查傳遞過(guò)來(lái)的參數(shù)類型,確保不傳入非法類型

3、如果傳入函數(shù)是表達(dá)式,則此表達(dá)式值僅僅一次

4、宏的優(yōu)點(diǎn)是你傳給宏什么數(shù)據(jù),它就返回同一個(gè)類型

Ø  靜態(tài)成員

靜態(tài)成員的提出是為了解決數(shù)據(jù)共享的問(wèn)題。

1、靜態(tài)數(shù)據(jù)成員

靜態(tài)數(shù)據(jù)成員的初始化需要注意以下幾點(diǎn):

l  靜態(tài)數(shù)據(jù)成員的初始化在類體外進(jìn)行,前面不加static,以免與一般的靜態(tài)變量或?qū)ο蠡煜?/span>

l  初始化時(shí)不加該成員的訪問(wèn)權(quán)限控制符。

l  初始化時(shí)使用作用域運(yùn)算符來(lái)標(biāo)明它所屬類,所以它屬于類的成員,不屬于對(duì)象的成員。

2、靜態(tài)成員函數(shù)

公有的靜態(tài)成員函數(shù)的一個(gè)重要的作用就是實(shí)現(xiàn)訪問(wèn)類的私有靜態(tài)數(shù)據(jù)成員。

定義靜態(tài)成員函數(shù)時(shí)注意以下幾點(diǎn):

l  由于關(guān)鍵字static不是函數(shù)類型的一部分,所以在類定義之外定義靜態(tài)成員函數(shù)時(shí)不能用static

l  靜態(tài)成員函數(shù)不能被說(shuō)明為虛函數(shù)

l  一個(gè)函數(shù)不能同時(shí)定義靜態(tài)成員函數(shù)和非靜態(tài)成員函數(shù)

Ø  友元函數(shù)和友元類

1、友元函數(shù)

使用友元函數(shù)的目的是為了提高程序的效率。友元函數(shù)可以直接訪問(wèn)對(duì)象的私有成員,因此節(jié)省了調(diào)用類的成員函數(shù)的時(shí)間開(kāi)銷。

友元函數(shù)的另一個(gè)優(yōu)點(diǎn)是使程序員不必考慮好類的各種使用情況才能設(shè)計(jì)類,而是可以根據(jù)需要使用友元函數(shù)增加類的接口。

友元函數(shù)的缺點(diǎn)是,由于它可以訪問(wèn)私有成員,因而破壞的類的封裝性和隱藏性,導(dǎo)致程序可維護(hù)性差。

因此,建議應(yīng)當(dāng)盡量不使用或少用友元函數(shù)。

   使用友元函數(shù)時(shí)注意以下幾點(diǎn):

l  在聲明友元函數(shù)時(shí),可以聲明為公有的,也可以聲明為私有的

l  類的友元函數(shù)不是本身的成員函數(shù),因此它沒(méi)有繼承性

l  友元函數(shù)不能使用存儲(chǔ)類修飾符來(lái)限定

2、友元類

友元類和友元函數(shù)類似。當(dāng)一個(gè)類(類B)作為另一個(gè)類(類A)的友元時(shí),這就意味著這個(gè)類(類B)的所有成員函數(shù)都是另一個(gè)類(類A)的友元函數(shù)。

Ø  對(duì)象指針

對(duì)象指針?lè)譃閮深悾?/span>

l  指向類類型對(duì)象的指針

l  指向類成員的指針

Ø  繼承與派生

繼承是一種客觀世界中普遍存在的機(jī)制,它可以使后輩從前輩那里得到屬性和行為特征,而繼承的過(guò)程就叫做派生。

繼承方式

基類中的訪問(wèn)權(quán)限

派生類中的訪問(wèn)權(quán)限

公有繼承

Public

Protected

Private

Public

Protected

不可訪問(wèn)

私有繼承

Public

Protected

Private

Private

Private

不可訪問(wèn)

保護(hù)繼承

Public

Protected

Private

Protected

Protected

不可訪問(wèn)

1、公有繼承方式

l  基類成員對(duì)其對(duì)象(基類對(duì)象)的可見(jiàn)性:公有成員可見(jiàn),私有和保護(hù)成員不可見(jiàn)。

l  基類成員對(duì)派生類的可見(jiàn)性:公有成員和保護(hù)成員可見(jiàn),而私有成員不可見(jiàn)。

l  基類成員對(duì)派生類對(duì)象的可見(jiàn)性:公有成員可見(jiàn),私有和保護(hù)成員不可見(jiàn)。

2、私有繼承方式

l  基類成員對(duì)其對(duì)象(基類對(duì)象)的可見(jiàn)性:公有成員可見(jiàn),其他成員不可見(jiàn)。

l  基類成員對(duì)派生類的可見(jiàn)性:公有成員和保護(hù)成員是可見(jiàn)的,而私有成員是不可見(jiàn)的。

l  基類成員對(duì)派生類對(duì)象的可見(jiàn)性:所有成員都是不可見(jiàn)的。

3、保護(hù)繼承方式

l  基類成員對(duì)其對(duì)象(基類對(duì)象)的可見(jiàn)性:公有成員可見(jiàn),其他成員不可見(jiàn)。

l  基類成員對(duì)派生類的可見(jiàn)性:公有成員和保護(hù)成員是可見(jiàn)的,而私有成員是不可見(jiàn)的。

l  基類成員對(duì)派生類對(duì)象的可見(jiàn)性:所有成員都是不可見(jiàn)的。

4、繼承情況

l  在公有繼承的情況下,派生類的對(duì)象可以直接訪問(wèn)基類的共有成員

l  在私有繼承的情況下,基類的公有和保護(hù)成員都將成為派生類的私有成員

l  在私有繼承的情況下,基類的保護(hù)成員將成為派生類的私有成員,而無(wú)法再向下繼承

l  基類的保護(hù)成員在派生類中仍然是保護(hù)成員

l  基類的保護(hù)成員在公有派生的情況下可以被繼承到派生類的派生類

l  基類的保護(hù)成員對(duì)基類而言相當(dāng)于私有成員,但可以由派生類訪問(wèn)

l  在保護(hù)繼承的情況下,基類的公有成員和保護(hù)成員都成為派生類的保護(hù)成員

5、構(gòu)造函數(shù)和析構(gòu)函數(shù)的執(zhí)行

派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù)的執(zhí)行是很重要的問(wèn)題

當(dāng)創(chuàng)建派生類對(duì)象時(shí),首先要調(diào)用基類的構(gòu)造函數(shù),接下來(lái)調(diào)用派生類字節(jié)的構(gòu)造函數(shù);而當(dāng)對(duì)象銷毀時(shí),析構(gòu)函數(shù)的調(diào)用次序正好相反,首先調(diào)用派生類的析構(gòu)函數(shù),然后再調(diào)用基類的析構(gòu)函數(shù)。

6、多繼承的二義性

一般來(lái)說(shuō),在派生類中對(duì)基類成員的訪問(wèn)應(yīng)該是唯一的。但是,由于多繼承的情況下,可能造成對(duì)基類某個(gè)成員的訪問(wèn)出現(xiàn)不唯一的情況。這就是對(duì)基類成員訪問(wèn)的二義性。

l  通過(guò)作用域限定符

l  使用虛基類

虛基類的說(shuō)明是用在定義派生類時(shí),寫在派生類名的后面。

Ø  函數(shù)和運(yùn)算符重載

1、函數(shù)重載

函數(shù)重載是指同一個(gè)函數(shù)名可以對(duì)應(yīng)著多個(gè)函數(shù)的實(shí)現(xiàn)。函數(shù)重載時(shí)要求函數(shù)的參數(shù)或者至少有一個(gè)類型不同,或者個(gè)數(shù)不同。而對(duì)于函數(shù)的返回值類型沒(méi)有要求,可以相同,也可以不同。

l  重載與覆蓋的區(qū)別

重載:相同的作用域,函數(shù)名相同,函數(shù)的參數(shù)不同,virtual關(guān)鍵字可有可無(wú)。

覆蓋:不同的作用域,函數(shù)名相同,函數(shù)的參數(shù)相同,基類中的函數(shù)必須有virtual關(guān)鍵字。

l  隱藏

如果派生類的函數(shù)與基類的函數(shù)同名,但是參數(shù)不同。此時(shí),不論有無(wú)virtual關(guān)鍵字,基類的函數(shù)將被隱藏。

    如果派生類的函數(shù)與基類的函數(shù)同名,并且參數(shù)也相同,但是基類函數(shù)沒(méi)有virtual關(guān)鍵字。此時(shí),基類的函數(shù)被隱藏。

2、運(yùn)算符重載

運(yùn)算符重載是指同一個(gè)操作符可以實(shí)現(xiàn)不同的功能,它與函數(shù)重載的概念相似。

l  重載算術(shù)運(yùn)算符

l  重載為類的友元函數(shù)

聲明重載為類的友元函數(shù)目的指在訪問(wèn)類的私有數(shù)據(jù)成員。

 

²  C++語(yǔ)言中,幾乎所有的運(yùn)算符都可以重載,不允許重載的運(yùn)算符是:.       ::     .*    ?

²  運(yùn)算符重載不會(huì)改變?cè)瓉?lái)運(yùn)算符的優(yōu)先級(jí)和結(jié)合性

²  運(yùn)算符重載實(shí)際是一個(gè)函數(shù),所以運(yùn)算符重載實(shí)際上是函數(shù)的重載

²  運(yùn)算符重載要堅(jiān)持:不能改變運(yùn)算符原有的優(yōu)先級(jí);不能改變運(yùn)算符的操作個(gè)數(shù);不能改變運(yùn)算符原有的結(jié)合性;不能改變運(yùn)算符原有的語(yǔ)法結(jié)構(gòu)。

²  使用運(yùn)算符時(shí)要遵守的原則:重載的運(yùn)算符含義必須清楚;重載的運(yùn)算符不能有二義性。

²  運(yùn)算符重載一般采用成員函數(shù)形式和友元函數(shù)形式的兩種方式。

Ø  Volatile修飾符

作用:告訴編譯器無(wú)需對(duì)變量作任何的優(yōu)化,即無(wú)需將它放到一個(gè)寄存器中,并且該值可被外部改變。對(duì)于多線程引用的全局變量來(lái)說(shuō),volatile是一個(gè)非常重要的修飾符。

Ø  _variant_t類型

_variant_tVARIANT的封裝類,其賦值可以使用槍支類型轉(zhuǎn)換,其構(gòu)造函數(shù)會(huì)自動(dòng)處理這些數(shù)據(jù)類型。使用時(shí)需加上#include <comdef.h>

_variant_t類型克服了普通數(shù)據(jù)類型在32位機(jī)器上的顯示,普通數(shù)據(jù)類型在32位上只能顯示10位,而_variant_t數(shù)據(jù)類型能顯示100位。

Ø  回調(diào)函數(shù)

回調(diào)函數(shù)是應(yīng)用程序提供給Windows系統(tǒng)DLL或其它DLL調(diào)用的函數(shù),一般用于截獲消息、獲取系統(tǒng)消息或處理異步事件。應(yīng)用程序把回調(diào)函數(shù)的地址指針告訴DLL,而DLL在適當(dāng)?shù)臅r(shí)候會(huì)調(diào)用該函數(shù)。

回調(diào)函數(shù)必須遵守事先規(guī)定好的參數(shù)格式和傳遞方式,否則DLL一調(diào)用它就會(huì)引起程序或系統(tǒng)崩潰。通常情況下,回調(diào)函數(shù)采用標(biāo)準(zhǔn)WindowsAPI的調(diào)用方式,即__stdcall,當(dāng)然DLL編制者可以自己定義調(diào)用方式,但客戶程序也必須遵守相同的規(guī)定。

__stdcall方式下,函數(shù)的參數(shù)按從右到左的順序壓入堆棧,除了明確指明是指針或應(yīng)用外,參數(shù)都按值傳遞,函數(shù)返回之前自己負(fù)責(zé)把參數(shù)從堆棧中彈出。

Ø  虛函數(shù)與多態(tài)性

1、基類指針與派生類指針

為什么將派生類對(duì)象地址賦給基類指針是合法的?因?yàn)?/span>C++的繼承采用了復(fù)制繼承的方式,派生類的對(duì)象要為基類的所有成員分配內(nèi)存空間(成員函數(shù)則分配函數(shù)指針空間),將它們存放在此空間,然后再存放派生類新增的成員;將基類對(duì)象的地址賦給派生指針需要強(qiáng)制類型轉(zhuǎn)換,但它是不安全的,因?yàn)槌绦騿T很有可能使用這個(gè)指針來(lái)訪問(wèn)并沒(méi)有實(shí)際定義的成員。

2、虛函數(shù)

聲明虛函數(shù)時(shí)要使用關(guān)鍵字virtual。、

Virtual 類型 函數(shù)名(參數(shù)列表);

派生類中對(duì)基類的虛函數(shù)進(jìn)行替換時(shí),要求派生類中說(shuō)明的虛函數(shù)和基類中的被替換的虛函數(shù)之間滿足如下條件:

l  與基類的虛函數(shù)有相同的參數(shù)個(gè)數(shù)。

l  其參數(shù)的類型與基類的虛函數(shù)的對(duì)應(yīng)參數(shù)類型相同。

l  其返回值或者與基類虛函數(shù)的相同,或者都返回指針或引用,并且派生類虛函數(shù)所返回的指針或引用的類型是基類中被替換的虛函數(shù)所返回的指針或引用的基類型的子類型。

l  虛函數(shù)的引入極大地方便了代碼重用,它使得程序員避免了逐個(gè)詳細(xì)定義每一個(gè)類。正是在引入虛函數(shù)的基礎(chǔ)上,類的層次關(guān)系得以實(shí)現(xiàn)。

3、多態(tài)性
      多態(tài)性是指同一個(gè)接口名稱具有不同的功能,也就是說(shuō)當(dāng)相同的消息被不同類型的對(duì)象接收時(shí)將導(dǎo)致完全不同的行為。
4、純虛函數(shù)

純虛函數(shù)是一種特殊的虛函數(shù)。

Virtual 類型 函數(shù)名(參數(shù)列表)= 0;

5、抽象類

如果一個(gè)類包含有純虛函數(shù),則這個(gè)類稱為抽象類。抽象類是一種特殊類,它是為了抽象和設(shè)計(jì)的目的而建立的,它處于類的繼承層次的較上層。

抽象類的主要作用是將有關(guān)的類組織在一個(gè)繼承層次結(jié)構(gòu)中,由它來(lái)為它們提供一個(gè)公共的根,相關(guān)的子類都是從這個(gè)根派生出來(lái)的。

在定義抽象類的派生類時(shí),必須提供基類純虛函數(shù)的具體實(shí)現(xiàn),或者仍然將純虛函數(shù)說(shuō)明為純虛函數(shù),否則編譯器將給出錯(cuò)誤信息。如果派生類給出了純虛函數(shù)的集體實(shí)現(xiàn),則此派生類是一個(gè)具體的類,可以創(chuàng)建此類的對(duì)象;如果派生類只是繼承了基類的虛函數(shù),則此派生類仍然是一個(gè)抽象類。

Ø  模板

1、函數(shù)模板

l  函數(shù)模板:相當(dāng)于一個(gè)函數(shù)模子,可以用這個(gè)模子套印出許多功能相同、而參數(shù)類型和返回類型不同的函數(shù)。

l  聲明:template <class X> void myswap(X &a, X &b)

l  模板函數(shù)與重載函數(shù)的區(qū)別。

模板函數(shù)和重載函數(shù)是非常類似的,都是一組名字相同的函數(shù),模板函數(shù)處理的是只處理的數(shù)據(jù)類型不同,各個(gè)函數(shù)的內(nèi)部行為是一樣的;而重載函數(shù)除了處理的數(shù)據(jù)類型不同外,各個(gè)函數(shù)的內(nèi)部行為時(shí)不一樣的。

2、  類模板

l  類模板和模板函數(shù)的定義類似。

l  聲明:template <class SType> class mystk

mystk類模板中的類型參數(shù)SType,它代表了棧中存儲(chǔ)對(duì)象的類型。要用類模板生成對(duì)象,必須先要給類模板的參數(shù)指定具體的數(shù)據(jù)類型,即類模板的實(shí)例化,類模板名 <具體的數(shù)據(jù)類型>

mystk<int> istack

l  類模板的實(shí)例化與類實(shí)例化是兩個(gè)不同的過(guò)程。類模板的實(shí)例化結(jié)果是生成實(shí)實(shí)在在的類;而類的實(shí)例化結(jié)果是生成對(duì)象,要為類對(duì)象分配空間,同時(shí)調(diào)用相應(yīng)的構(gòu)造函數(shù)初始化對(duì)象。

l  當(dāng)在類模板體外定義模板的成員函數(shù)時(shí),要在開(kāi)頭寫上template<class SType>,后面是函數(shù)的說(shuō)明,在函數(shù)名前要加上mystk<SType>::作用域說(shuō)明符,表示此函數(shù)是mystk類模板的函數(shù),SType是模板參數(shù)表中說(shuō)明的參數(shù)。

3、類模板的派生問(wèn)題

1、普通類作為基類

2、類模板作為基類

注意程序的書寫格式。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
《Effective C 》讀書摘要
C++ Primer:類設(shè)計(jì)者的工具
3分鐘帶你讀懂C加加語(yǔ)言學(xué)習(xí)路線
C++知識(shí)點(diǎn)梳理
新書推薦 | C 語(yǔ)言程序設(shè)計(jì)(第2版·微課視頻版)
C 如何成了今天這副模樣及其語(yǔ)法從編譯器角度的合理性理解
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服