青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

The Coder

I am a humble coder.

  C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
  4 隨筆 :: 4 文章 :: 9 評(píng)論 :: 0 Trackbacks
學(xué)習(xí)程序的好方法是閱讀代碼和改進(jìn)代碼。
下面的程例來(lái)自《An Overview of the C++ Programming Language》(5.1 異常和錯(cuò)誤處理)
程序用途:使用C++的異常機(jī)制,報(bào)告stack的上溢或者下溢。(我適當(dāng)?shù)陌汛a補(bǔ)全。)

version 1 演示了基本的異常用法。
從try里拋出一個(gè)異常(實(shí)例或?qū)ο螅蒫atch里的類接受。

?1?version?1
?2?//?From:?An?Overview?of?the?C++?Programming?Language
?3??
?4?#include?<cstdlib>
?5?#include?<iostream>
?6?#include?<string>
?7?using?namespace?std;
?8?
?9?template<class?T>class?Stack{
10?????T*?v;
11?????int?max_size;
12?????int?top;
13?public:
14?????class?Underflow{?};???//?下溢
15?????class?Overflow{?};????//?上溢
16?????//?construct?function.?determine?the?size???
17?????Stack(int?s):?max_size(s),?top(0){?v?=?new?T[max_size];}??????
18?????~Stack(){}
19?????void?push(T?c){
20?????????if(top?==?max_size)?throw?Overflow();
21?????????v[top++]?=?c;
22?????}
23?????T?pop(){
24?????????if(top?==?0)?throw?Underflow();
25?????????return?v[--top];
26?????}
27?};?
28?
29?void?f()
30?{
31?????Stack<string>?ss(10);
32?????try{
33?????????ss.push("Quiz");
34?????????string?s?=?ss.pop();
35?????????ss.pop();
36?????}
37?????catch(Stack<string>::Overflow){
38?????????cerr?<<?"error:?stack?overflow"?<<?endl;
39?????}
40?????catch(Stack<string>::Underflow){
41?????????cerr?<<?"error:?stack?underflow"?<<?endl;
42?????}
43?}
44?
45?int?main(int?argc,?char?*argv[])
46?{
47?????f();
48?????system("PAUSE");
49?????return?EXIT_SUCCESS;
50?}
51?
52?輸出結(jié)果:error:?stack?underflow
53?
54?


改進(jìn),我們的第二個(gè)版本如下:
如果將

?1??class?Underflow{?};???//?下溢
?2?????class?Overflow{?};????//?上溢
?3?
?4?????catch(Stack<string>::Overflow){
?5?????????cerr?<<?"error:?stack?overflow"?<<?endl;
?6?????}
?7?????catch(Stack<string>::Underflow){
?8?????????cerr?<<?"error:?stack?underflow"?<<?endl;
?9?????}
10?


分別改成如下:

?1?
?2?????class?Underflow{??????//
?3?????public:
?4?????????void?error(void){
?5?????????????cerr?<<?"stack?Underflow"?<<?endl;
?6?????????}????
?7?????};???
?8?????class?Overflow{???????//?
?9?????public:
10?????????void?error(void){
11?????????????cerr?<<?"stack?Overflow"?<<?endl;
12?????????}?
13?????};???
14?
15?????catch(Stack<string>::Overflow&?e){
16?????????e.error();
17?????}
18?????catch(Stack<string>::Underflow&?e){
19?????????e.error();
20?????}
21?

改后的程序和原先的區(qū)別在哪里,看出來(lái)了嗎? 呵呵呵。

當(dāng)然,我們還能將代碼改進(jìn)。這樣產(chǎn)生了第三個(gè)版本。

第三個(gè)版本:version3
在Stack里面添加一個(gè)類class Stack_error,讓Underflow和Overflow都繼承它:

?1?template<class?T>class?Stack{
?2?????//?????
?3?public:
?4?????class?stack_error{
?5?????public:
?6?????????virtual?void?error(void){  //當(dāng)然,可以把它做成純虛的。抽象類。
?7?????????????cerr?<<?"stack_error"?<<?endl;
?8?????????}
?9?????};
10?????class?Underflow:?public?stack_error{??????//
11?????public:
12?????????void?error(void){
13?????????????cerr?<<?"stack?Underflow"?<<?endl;
14?????????}????
15?????};???
16?????class?Overflow:?public?stack_error{???????//?
17?????public:
18?????????void?error(void){
19?????????????cerr?<<?"stack?Overflow"?<<?endl;
20?????????}?
21?????};???
22?????//?
23?}
24?
接著把兩個(gè)catch合并成一個(gè)catch,如下。
??try{
?????
//?the?same
????}
????
catch(Stack<string>::stack_error&?e){
????????e.error();
????}

這三個(gè)版本的功能是一樣的,但版本越高,代碼越清晰,代碼也越容易維護(hù)。

如果我們?cè)O(shè)計(jì)了一個(gè)庫(kù)(比如上面的Stack),在開(kāi)始的時(shí)候想到的就是兩個(gè)異常,overflow和underflow。如果有version1和version3 這兩種方法設(shè)計(jì)Stack,那么函數(shù)f()(用戶的代碼)也同樣version1和version3。當(dāng)一段日子過(guò)去了,我們準(zhǔn)備再加入一個(gè)異常,比如midflow()(呵呵呵,我也想不出有什么類似的異常了)。這樣的話,庫(kù)設(shè)計(jì)者對(duì)用戶說(shuō):“我們發(fā)現(xiàn)了midflow()異常,并加入庫(kù)代碼中,請(qǐng)您改寫(xiě)您的代碼f()?!?br />這樣我們的version1得修改成如下形式:
void?f()
{
????Stack
<string>?ss(10);
????
try{
 ????
//.
????}
????
catch(Stack<string>::Overflow){
????????cerr?
<<?"error:?stack?overflow"?<<?endl;
????}
????
catch(Stack<string>::Underflow){
????????cerr?
<<?"error:?stack?underflow"?<<?endl;
????}
????
catch(Stack<string>::Midflow){????//我們的找到所有撲捉stack異常的代碼,并加入這兩句。
??????????cerr?<<?"error:?stack?midflow"?<<?endl;
????}
}

而version3由于midflow()繼承了stack_error。而其接口還是一樣,客戶代碼就無(wú)需更改了。

?完畢。鞠躬。 請(qǐng)多多交流!

附:version3完整代碼:
?1?Version?3:
?2?#include?<cstdlib>
?3?#include?<iostream>
?4?
?5?using?namespace?std;
?6?
?7?template<class?T>class?Stack{
?8?????T*?v;
?9?????int?max_size;
10?????int?top;
11?public:
12?????class?stack_error{
13?????public:
14?????????virtual?void?error(void)?=?0;
15?????};
16?
17?????class?Underflow:?public?stack_error{??????//
18?????public:
19?????????void?error(void){
20?????????????cerr?<<?"stack?Underflow"?<<?endl;
21?????????}????
22?????};???
23?????class?Overflow:?public?stack_error{???????//?
24?????public:
25?????????void?error(void){
26?????????????cerr?<<?"stack?Overflow"?<<?endl;
27?????????}?
28?????};???
29?????Stack(int?s):?max_size(s),?top(0){?v?=?new?T[max_size];}????????//?construct?function.?determine?the?size???
30?????~Stack(){}
31?????void?push(T?c){
32?????????if(top?==?max_size)?throw?Overflow();
33?????????v[top++]?=?c;
34?????}
35?????T?pop(){
36?????????if(top?==?0)?throw?Underflow();
37?????????return?v[--top];
38?????}
39?};?
40?
41?void?f()
42?{
43?????Stack<string>?ss(0);
44?????try{
45?????????ss.push("Quiz");
46?????????string?s?=?ss.pop();
47?????????ss.pop();
48?????}
49?????catch(Stack<string>::stack_error&?e){
50?????????e.error();
51?????}
52?
53?}
54?
55?int?main(int?argc,?char?*argv[])
56?{
57?????f();
58?????system("PAUSE");
59?????return?EXIT_SUCCESS;
60?}
61?

posted on 2006-05-31 10:29 TH 閱讀(719) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C++語(yǔ)言特性和設(shè)計(jì)
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            香蕉成人久久| 欧美一区午夜视频在线观看| 亚洲国产欧美日韩| 亚洲伊人观看| 亚洲欧洲日本国产| 久久精品国产999大香线蕉| 欧美色偷偷大香| 日韩午夜免费| 亚洲国产成人一区| 欧美大片国产精品| 亚洲国产婷婷香蕉久久久久久99| 久久嫩草精品久久久精品一| 午夜精品福利视频| 国产伦精品一区二区三区免费 | 亚洲无人区一区| 亚洲福利国产| 男女精品网站| 亚洲精品午夜| 亚洲欧洲在线一区| 欧美精品999| 一本久久知道综合久久| 亚洲三级性片| 欧美性大战久久久久久久蜜臀| 一区二区三区日韩精品| 日韩图片一区| 国产精品一二三视频| 欧美在线视屏| 久久精品99国产精品酒店日本| 国产综合欧美在线看| 国产精品久久久久天堂| 极品少妇一区二区三区精品视频| 在线亚洲精品福利网址导航| 亚洲欧洲三级| 欧美日产一区二区三区在线观看| 日韩网站在线观看| 日韩一区二区久久| 欧美视频一区二区| 香港成人在线视频| 久久精品国产99精品国产亚洲性色 | 性久久久久久| 欧美亚洲网站| 亚洲国产视频直播| 一本久道久久综合中文字幕| 国产精品视频在线观看| 久久久亚洲国产天美传媒修理工| 亚洲一区在线直播| 在线视频国内自拍亚洲视频| 日韩午夜高潮| 国内精品一区二区| 91久久精品国产91久久| 国产伦精品免费视频| 欧美国产免费| 国产精品亚洲综合久久| 老鸭窝亚洲一区二区三区| 久久精品国产欧美亚洲人人爽| 黄色成人在线免费| 亚洲激情女人| 99精品国产在热久久| 国产女主播在线一区二区| 久久久噜噜噜久久| 欧美精品日韩www.p站| 性色av一区二区三区| 久久久久久9| 亚洲在线视频网站| 欧美肥婆在线| 久久激情一区| 欧美性事在线| 亚洲激情在线观看| 激情六月综合| 亚洲尤物视频在线| 亚洲最新色图| 久久噜噜噜精品国产亚洲综合| 亚洲午夜高清视频| 午夜精品在线| 欧美三级网页| 亚洲精品欧美极品| 伊人久久噜噜噜躁狠狠躁| 亚洲激情成人网| 国产三级精品三级| 一区二区三区久久久| 在线一区日本视频| 欧美高清视频在线观看| 久久久免费av| 国产精品亚洲成人| 亚洲人成网站777色婷婷| 国产综合欧美| 欧美亚洲一区| 欧美一级免费视频| 欧美精品成人一区二区在线观看 | 最新国产乱人伦偷精品免费网站| 91久久精品国产91性色| 国产精品一区二区你懂得| 亚洲欧美日韩在线观看a三区| 久久av免费一区| 欧美精品久久99久久在免费线| 欧美一区二区三区免费在线看| 亚洲人成毛片在线播放| 欧美一区免费| 久久成年人视频| 国产精品欧美一区二区三区奶水| 亚洲精品日日夜夜| 日韩视频一区二区三区| 免费成人黄色av| 亚洲国产乱码最新视频| 亚洲欧洲综合| 欧美大片一区| 亚洲欧洲日夜超级视频| 欧美日韩精品免费观看视频完整| 美女尤物久久精品| 性色一区二区三区| 欧美一级免费视频| 久久久久综合| 国产精品你懂的在线| 亚洲日本久久| 99国产精品久久久久久久成人热 | 欧美日本亚洲韩国国产| 亚洲精品网站在线播放gif| 一区二区三区精密机械公司| 国产精品va在线播放| 亚洲一区在线免费| 久久免费观看视频| 在线高清一区| 欧美国产日韩a欧美在线观看| 亚洲人成网站色ww在线| 亚洲欧美综合另类中字| 国产一区二区精品久久99| 国产精品久久久久一区二区| 国产视频自拍一区| 久久精品30| 亚洲国产精品综合| 中文无字幕一区二区三区| 国产精品伊人日日| 久久久久久夜| 日韩午夜在线视频| 久久久国际精品| 99re成人精品视频| 国产在线精品一区二区夜色| 欧美大片va欧美在线播放| 欧美日本在线播放| 欧美中文字幕视频| 在线国产精品播放| 日韩一级黄色大片| 久久国产成人| 亚洲精品乱码久久久久久蜜桃麻豆 | 一区二区高清视频在线观看| 国产欧美一区二区三区在线看蜜臀| 玖玖玖免费嫩草在线影院一区| 一区二区欧美亚洲| 免费在线视频一区| 欧美一级在线视频| 亚洲人成网站精品片在线观看| 国产精品在线看| 欧美巨乳在线| 久久亚洲春色中文字幕久久久| 亚洲婷婷综合久久一本伊一区| 欧美xxxx在线观看| 欧美在线综合| 亚洲一区二区日本| 亚洲三级电影全部在线观看高清| 国产精品无码专区在线观看| 欧美日韩国产综合网 | 欧美在线视频网站| 亚洲视频免费在线观看| 91久久视频| 快播亚洲色图| 久久女同互慰一区二区三区| 小嫩嫩精品导航| 亚洲影视九九影院在线观看| 亚洲精品亚洲人成人网| 在线日韩日本国产亚洲| 狠狠爱www人成狠狠爱综合网| 国产欧美在线观看| 国产精品影视天天线| 国产精品男gay被猛男狂揉视频| 欧美破处大片在线视频| 欧美福利视频在线观看| 免费精品99久久国产综合精品| 久久久久久久网| 久久九九精品| 久久久99免费视频| 久久香蕉国产线看观看网| 久久精品91| 久久男女视频| 免费永久网站黄欧美| 榴莲视频成人在线观看| 男人的天堂亚洲| 欧美黄色一区二区| 欧美精品手机在线| 欧美日韩理论| 国产精品久久久久一区二区| 国产精品外国| 国产亚洲一级| 在线播放亚洲一区| 亚洲肉体裸体xxxx137| 一本大道久久a久久精品综合| 亚洲一二区在线| 欧美一区二区三区视频在线观看| 欧美一区二区在线视频| 久久综合福利| 亚洲黄色有码视频|