成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

C++PrimerPlus學(xué)習(xí)筆記之友元、異常和其他-創(chuàng)新互聯(lián)

前言

個(gè)人覺得學(xué)習(xí)編程最有效的方法是閱讀專業(yè)的書籍,通過閱讀專業(yè)書籍可以構(gòu)建更加系統(tǒng)化的知識(shí)體系。
一直以來都很想深入學(xué)習(xí)一下C++,將其作為自己的主力開發(fā)語言?,F(xiàn)在為了完成自己這一直以來的心愿,準(zhǔn)備認(rèn)真學(xué)習(xí)《C++ Primer Plus》。
為了提高學(xué)習(xí)效率,在學(xué)習(xí)的過程中將通過發(fā)布學(xué)習(xí)筆記的方式,持續(xù)記錄自己學(xué)習(xí)C++的過程。

薩嘎網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站設(shè)計(jì)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)于2013年成立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。
一、友元 1、友元類

友元聲明可以位于公有、私有或保護(hù)部分,位置無關(guān)緊要。
通過如下代碼,可以將Remote類聲明為Tv類的友元類:

class Tv
{friend class Remote;
...
}
class Remote
{...
}
2、友元成員函數(shù)

Remote::set_chan()稱為Tv類的友元的方法是,在Tv類聲明中將其聲明為友元:

class Tv
{friend void Remote::set_chan(Tv & t, int c);
...
}

為了解決定義位置循環(huán)依賴的問題,需要使用向前聲明(forward declaration)。為此需要這樣進(jìn)行排列:

class Tv;//向前聲明
class Remote{...};
class Tv{...};
3、其他友元關(guān)系

讓類彼此成為對方的友元來實(shí)現(xiàn)。

4、共同的友元

函數(shù)需要訪問兩個(gè)類的私有數(shù)據(jù)時(shí)。

二、嵌套類

在另一個(gè)類中聲明的類被稱為嵌套類(nested class),它通過提供新的類型類作用與來避免名稱混亂。包含類的成員函數(shù)可以創(chuàng)建和使用被嵌套類的對象;而僅當(dāng)聲明位于公有部分,才能在包含類的外面使用嵌套類,而且必須使用作用域解析運(yùn)算符。

1、嵌套類和訪問權(quán)限

嵌套類、結(jié)構(gòu)和枚舉的作用域特征:

聲明位置包含它的類是否可以使用它從包含它的類派生而來的類是否可以使用它在外部是否可以使用
私有部分
保護(hù)部分
公有部分是,通過類限定符來使用

對嵌套類的訪問控制權(quán)的控制規(guī)則與常規(guī)類相同。

2、模板中的嵌套

將類定義轉(zhuǎn)換為模板時(shí),不會(huì)由于它包含嵌套類帶來問題。

3、異常

(1) 調(diào)用abort()
abort()函數(shù)的原型位于頭文件cstdlib(或stdlib.h)中,其典型實(shí)現(xiàn)是向標(biāo)準(zhǔn)錯(cuò)誤流(即cerr使用的錯(cuò)誤流)發(fā)送消息abnomal program termination(程序異常終止),然后終止程序。它還返回一個(gè)隨實(shí)現(xiàn)而異的值,告訴操作系統(tǒng)(或父級進(jìn)程),處理失敗。

(2)返回錯(cuò)誤碼
一種比異常終止更靈活的方法是,使用函數(shù)的返回值來指出問題。

(3)異常機(jī)制
C++異常時(shí)對程序運(yùn)行過程中發(fā)生的異常情況的一種響應(yīng)。異常提供了將控制權(quán)從程序的一個(gè)部分傳遞到另一個(gè)部分的途徑。對異常的處理由3個(gè)部分組成:

  • 引發(fā)異常;
  • 使用處理程序捕獲異常;
  • 使用try塊。

throw關(guān)鍵字表示引發(fā)異常,緊隨其后的值(例如字符串和對象)指出了異常的特征。
catch關(guān)鍵字表示捕獲異常。
try塊標(biāo)識(shí)其中特定的異??赡鼙患せ畹拇a塊,它后面跟一個(gè)或多個(gè)catch塊。

try{uint z = 1 - 2;
}
catch
{std::cout<< "計(jì)算結(jié)果超出范圍"<

執(zhí)行throw語句類似于執(zhí)行返回語句,因?yàn)樗矊⒔K止函數(shù)的執(zhí)行;但不是將控制權(quán)返回給調(diào)用程序,而是導(dǎo)致程序沿函數(shù)調(diào)用序列后退,直到找到包含try塊的函數(shù)。

(4)將對象用作異常類型
通常,引發(fā)異常的函數(shù)將傳遞一個(gè)對象。這樣做得重要優(yōu)點(diǎn)之一是,可以使用不同的異常類型來區(qū)分不同的函數(shù)在不同情況下引發(fā)的異常。另外,對象可以攜帶信息,程序員可以根據(jù)這些信息來確定引發(fā)異常的原因。同時(shí),catch塊可以根據(jù)這些信息來決定采取什么措施。

(5) 異常規(guī)范和C++11
C++98新增,C++11已摒棄。

(6)棧解退
假設(shè)try塊設(shè)有直接調(diào)用引發(fā)異常的函數(shù),而是調(diào)用了對引發(fā)異常的函數(shù)進(jìn)行調(diào)用的函數(shù),則程序流程將從引發(fā)異常的函數(shù)跳到包含try塊和處理程序的函數(shù)。這涉及到棧解退(unwinding the stack)。

(7)其他異常特性
引發(fā)異常時(shí)編譯器總是創(chuàng)建一個(gè)臨時(shí)拷貝,即使異常規(guī)范和catch塊中指定的是引用。
基類引用可以執(zhí)行派生類對象。
應(yīng)將捕獲位于層次結(jié)構(gòu)最下面的異常類的catch語句放在最前面,將捕獲基類異常的catch語句放在最后面。
使用省略號(hào)來表示異常類型,從而捕獲任何異常:

catch(…)
{//statements
}

catch語句中使用基類對象時(shí),將捕獲所有的派生類對象,但派生特性將被剝?nèi)?,因此將使用虛方法的基類版本?/p>

(8)exception
exception頭文件(以前為exception.hexcept.h)定義了exception類,C++可以把它用作其他異常類的基類。

C++提供了一種在失敗時(shí)返回空指針的new

int * pi = new (std::nothrow) int;

(9)異常、類和繼承
異常、類和繼承以三種方式相互關(guān)聯(lián)。首先,可以像標(biāo)準(zhǔn)C++庫所做的那樣,從一個(gè)異常類派生出另個(gè)一個(gè);其次,可以在類定義中嵌套異常類聲明來組合異常;最后,這種嵌套聲明本身可被繼承,還可用作基類。

(10) 異常何時(shí)會(huì)迷失方向
雖然C++11摒棄了異常規(guī)范,但仍支持它,且有些現(xiàn)有的代碼使用了它。

(11)有關(guān)異常的注意事項(xiàng)
使用異常會(huì)增加程序代碼,降低程序的運(yùn)行速度。異常規(guī)范不適用于模板,因?yàn)槟0搴瘮?shù)引發(fā)的異??赡茈S特定的具體化而異。異常和動(dòng)態(tài)內(nèi)存分配并非總能協(xié)同工作。

四、RTTI

RTTI是運(yùn)行階段類型識(shí)別(Runtime Type Identification)的簡稱。這是新添加到C++中的特性之一,很多老式實(shí)現(xiàn)不支持。

C++有3個(gè)支持RTTI的元素。

  • 如果可能的話,dynamic_cast運(yùn)算符將使用一個(gè)指向基類的指針來生成一個(gè)指向派生類的指針;否則,該運(yùn)算符返回0——空指針。
  • typeid運(yùn)算符返回一個(gè)指出對象的類型的值。
  • type_info結(jié)構(gòu)存儲(chǔ)了有關(guān)特定類型的信息。
Superb * pm = dynamic_cast(pg);
五、類型轉(zhuǎn)換運(yùn)算符

類型轉(zhuǎn)換運(yùn)算符:

  • dynamic_cast
  • const_cast
  • static_cast
  • reinterpret_cast

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

本文標(biāo)題:C++PrimerPlus學(xué)習(xí)筆記之友元、異常和其他-創(chuàng)新互聯(lián)
本文鏈接:http://jinyejixie.com/article10/dedhdo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、網(wǎng)站改版、響應(yīng)式網(wǎng)站、建站公司、品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站內(nèi)鏈

廣告

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

双城市| 闸北区| 巴林右旗| 读书| 旌德县| 简阳市| 阿鲁科尔沁旗| 锦屏县| 涿鹿县| 哈巴河县| 巫山县| 福泉市| 腾冲县| 南澳县| 吉首市| 湖口县| 隆化县| 枣阳市| 昌图县| 汝南县| 汶上县| 大理市| 孟津县| 湘西| 象州县| 道真| 大同县| 那曲县| 教育| 扬中市| 鹤山市| 临潭县| 班玛县| 湾仔区| 三河市| 驻马店市| 灵宝市| 陈巴尔虎旗| 保亭| 乌兰察布市| 古交市|