最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺析C++的特殊工具與技術(shù)

 更新時間:2013年08月20日 09:19:40   作者:  
以下是對C++中的特殊工具與技術(shù)進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下

一、優(yōu)化內(nèi)存
1、策略:預(yù)先分配用于創(chuàng)建對象的內(nèi)存,需要時在預(yù)先分配的內(nèi)存中構(gòu)造每人新對象。

2、allocator類;a.destroy(p),運(yùn)行T*指針p所指對象的析構(gòu)函數(shù)。注意,運(yùn)行析構(gòu)函數(shù)并不釋放對象所在的內(nèi)存,要想釋放內(nèi)存就要調(diào)用函數(shù)a.deallocate(p,n),釋放然為p的T*指針中包含的地址處保存T類型的n個對象。

3、operator new函數(shù)與operator delete函數(shù);注意與new和delete表達(dá)式區(qū)別。operator new和operator delete是函數(shù),而new和delete是表達(dá)式。它們都返回void*指針而不是類型化的指針。使用allocator比直接使用operator new和operator delete函數(shù)更為類型安全。標(biāo)準(zhǔn)庫函數(shù)operator new和operator delete可以說是allocator的allocate和deallocate成員的低級版本,它們分配但不初始化內(nèi)存。注意,調(diào)用operator delete函數(shù)不會運(yùn)行析構(gòu)函數(shù),它只釋放指定的內(nèi)存。

4、定位new表達(dá)式;定位new表達(dá)式在已分配的原始內(nèi)存中初始化一個對象,它與new的其他版本的不同之外在于,它不分配內(nèi)存。相反,它接受指向已分配但未構(gòu)造內(nèi)存的指針,并在該內(nèi)存中初始化一個對象。定位new表達(dá)式使我們能夠在特定的、預(yù)分配的內(nèi)存地址構(gòu)造一個新對象。表達(dá)式為new (place_address) type或new (place_address) type(initialzer-list),place_address必須是一個指針,initial-list是一個可為空的初始化列表,例如:new (sp)string(b,e)。定位new表達(dá)式初始化一個對象的時候,它可以使用任何構(gòu)造函數(shù),并直接建立對象。

5、創(chuàng)建新的對象的時候,可以在這個預(yù)先分配的空間構(gòu)造對象。釋放對象的時候,將它們放回預(yù)先分配對象的塊中,而不是將內(nèi)存真正返回給系統(tǒng)。所以可以通過定義(或繼承)自己的名為operator new和operator delete的成員,來管理自身類型的內(nèi)存,否則,調(diào)用這些函數(shù)的標(biāo)準(zhǔn)庫版本。因為在構(gòu)造對象前要使用operator new在對象撤銷后使用operator delete所以,成員new和delete函數(shù)必須是靜態(tài)的。

二、運(yùn)行時類型識別
1、通過運(yùn)行時類型識別(RTTI),程序能夠使用基類的指針或引用來檢索這些指針或引用所指對象的實際派生類型。通過兩個操作符提供RTTI:

*typeid 操作符,返回指針或引用所指對象的實際類型
*dynamic_cast操作符,將基類類型的指針或引用安全地轉(zhuǎn)換為派生類型的指針或引用

2、dynamic_cast操作符;用法:dynamic_cast<Type */&>(val),Type是轉(zhuǎn)換的目標(biāo)類型,val是基類類型的對象。
如,if(Derived *derivedPtr==dynamic_cast<Derived*>(basePtr){...}。

dynamic_cast操作符執(zhí)行的驗證必須在運(yùn)行時進(jìn)行。如果轉(zhuǎn)換到指針類型失敗,則dynamic_cast的結(jié)果為0;如果轉(zhuǎn)換到引用類型的dynamic_cast失敗,則拋出一個bad_cast類型的異常。

3、typeid操作符;表達(dá)式:typeid(e),e是任意表達(dá)式或者是類型名。typeid操作符可以與任何類型的表達(dá)式一起使用。typeid最常見的用途是比較兩個表達(dá)式的類型,或者將表達(dá)式的類型與特定類型相比較。例如:if(typeif(*derivedPtr)==typeid(Derived);

三、類成員的指針
1、聲明成員指針。成員指針只應(yīng)用于非static成員,static成員指針是普通指針。

2、定義數(shù)據(jù)成員的指針。既要表明成員的類型,又要表明成員所屬的類。
如string Screen::*,是指向Screen類的string成員的指針。

3、定義成員函數(shù)的指針。

一致的匹配要求:
*函數(shù)形參的類型和數(shù)目,包括成員是否為const
*返回類型
*所屬類的類型
如:char (Screen::*)()const

4、使用類成員的指針;
*成員指針解引用操作符(.*)從對象或引用獲取成員
*成員指針箭頭操作符(->*)通過對象的指針獲取成員
可以定義一個數(shù)組保存指向每個光標(biāo)移動函數(shù)的指針。

更多內(nèi)容,見上篇:指向類成員的指針并非指針?;騾⒖肌禖++必知必會》

四、嵌套類
在一個類內(nèi)部定義另一個類。嵌套類是獨(dú)立的類,基本上與它們的外圍類不相關(guān),因此,外圍類和嵌套類是互相獨(dú)立的。外圍類對嵌套類的成員特殊訪問權(quán),并且嵌套類對其外圍類的成員也沒有特殊訪問權(quán)。嵌套類的名字在其外圍類的作用域中可見,但在其他類作用域或定義外圍類的作用域中不可見。嵌套類可以具有與非嵌套類相同種類的成員。

1、嵌套在類模板內(nèi)部的類是模板;

2、定義;在其類外部定義的嵌套類的成員,不能定義在外圍類內(nèi)部,嵌套類的成員不是外圍類的成員。為了在外圍類的外部定義類體,必須用外圍類的名字既定嵌套類的名字。注意,我們?nèi)匀槐仨氃谕鈬惖亩x體中聲明嵌套類。嵌套類中聲明的靜態(tài)成員的定義也放在外層作用域中。

3、嵌套類型對象只包含嵌套類型的成員,不能使用this獲取外圍類的成員。外圍類也不能直接調(diào)用嵌套類中的成員。嵌套類可以直接引用外圍類的靜態(tài)成員、類型名和枚舉成員。

五、聯(lián)合:節(jié)省空間的類;
1、一個union對象可以有多個數(shù)據(jù)成員,但在任何時刻,只有一個成員可以有值。

2、為union對象分配的存儲量至少與union的最大煩數(shù)據(jù)成員一樣大。

3、union不能作為基類使用,成員能為虛函數(shù),也不能定義構(gòu)造函數(shù)、析構(gòu)函數(shù)或賦值操作符的類類型成員。

4、為了知道union對象中的值,通常會把一個枚舉型的變量作為union對象的判別式。

相關(guān)文章

  • VS及Unity安裝和使用Nuget包

    VS及Unity安裝和使用Nuget包

    本文主要介紹了VS及Unity安裝和使用Nuget包,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • xxx_cast類型轉(zhuǎn)換的實現(xiàn)方法

    xxx_cast類型轉(zhuǎn)換的實現(xiàn)方法

    下面小編就為大家?guī)硪黄獂xx_cast類型轉(zhuǎn)換的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • C++11標(biāo)準(zhǔn)庫 互斥鎖 <mutex> 詳解

    C++11標(biāo)準(zhǔn)庫 互斥鎖 <mutex> 詳解

    這篇文章主要介紹了C++11標(biāo)準(zhǔn)庫互斥鎖 <mutex> 的相關(guān)知識,使用call_once()的時候,需要一個once_flag作為call_once()的傳入?yún)?shù),本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2024-07-07
  • 函數(shù)指針與指針函數(shù)的學(xué)習(xí)總結(jié)

    函數(shù)指針與指針函數(shù)的學(xué)習(xí)總結(jié)

    函數(shù)指針是指向函數(shù)的指針,指針函數(shù)是指一個函數(shù)的返回值是一個指針。以下就是對函數(shù)指針與指針函數(shù)的應(yīng)用進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以參考下
    2013-07-07
  • C語言之沒有main函數(shù)的helloworld示例

    C語言之沒有main函數(shù)的helloworld示例

    這篇文章主要介紹了C語言之沒有main函數(shù)的helloworld示例,本文分解了帶main函數(shù)的helloworld示例,從而分析出不需要main函數(shù)的helloworld示例,需要的朋友可以參考下
    2015-03-03
  • C++ 學(xué)習(xí)之旅二 說一說C++頭文件

    C++ 學(xué)習(xí)之旅二 說一說C++頭文件

    作為一個二手的.net程序員,你看到了C++頭文件一定就犯迷糊了,這到底是個啥玩意。再我糾結(jié)了24個小時, google20次,度娘10下,看過10來騙文章以后,我可能稍微開竅了。我對C++頭文件總結(jié),與.net比較如下
    2012-11-11
  • C語言中求余運(yùn)算符的使用解讀

    C語言中求余運(yùn)算符的使用解讀

    這篇文章主要介紹了C語言中求余運(yùn)算符的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • C語言進(jìn)階幾分鐘帶你理解大小端存儲模式

    C語言進(jìn)階幾分鐘帶你理解大小端存儲模式

    這篇文章主要為大家介紹了C語言進(jìn)階大小端模式的示例詳解,帶各位讀者朋友五分鐘腳踩大小端模式,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-02-02
  • C語言版約瑟夫問題算法實現(xiàn)

    C語言版約瑟夫問題算法實現(xiàn)

    大家好,本篇文章主要講的是C語言版約瑟夫問題算法實現(xiàn),感興趣的同學(xué)趕快來看一看吧,對你又幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • C++設(shè)計模式編程中的迭代器模式應(yīng)用解析

    C++設(shè)計模式編程中的迭代器模式應(yīng)用解析

    這篇文章主要介紹了C++設(shè)計模式編程中的迭代器模式應(yīng)用解析,迭代器模式注重對集合中元素的遍歷而不使其暴露,需要的朋友可以參考下
    2016-03-03

最新評論

旬邑县| 柳河县| 谢通门县| 静安区| 沈阳市| 丘北县| 奉新县| 枞阳县| 墨玉县| 福鼎市| 凤山市| 民县| 丁青县| 枣阳市| 庆城县| 濮阳市| 海口市| 若羌县| 涿鹿县| 杂多县| 无锡市| 额尔古纳市| 霍林郭勒市| 新泰市| 达拉特旗| 乌兰浩特市| 玉林市| 商河县| 新河县| 贵阳市| 南部县| 湖口县| 广平县| 定日县| 宁城县| 略阳县| 庆元县| 手游| 璧山县| 宁城县| 龙门县|