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

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>
            午夜久久久久久| 欧美日韩欧美一区二区| 亚洲精品一区在线| 国产精品午夜久久| 国产情人节一区| 国产精品草莓在线免费观看| 免费观看久久久4p| 欧美国产第二页| 欧美日韩aaaaa| 久久人人爽人人爽爽久久| 99视频超级精品| 亚洲欧美日韩国产综合精品二区| 国产精品一区二区女厕厕| 国产精品一区免费视频| 国产毛片一区二区| 一区二区三区在线视频播放 | 亚洲国产你懂的| 99国产精品99久久久久久粉嫩| 亚洲激情电影在线| 亚洲最新在线| 午夜视频在线观看一区二区| 久久久噜噜噜久久狠狠50岁| 亚洲第一免费播放区| 亚洲一区二区成人| 久久精品一区二区三区四区 | 免费看av成人| 国产精品jvid在线观看蜜臀| 国产精品私拍pans大尺度在线| 韩国美女久久| 欧美影院精品一区| 亚洲一区二区不卡免费| 欧美日韩精品三区| 1024亚洲| 亚洲大胆人体在线| 中国女人久久久| 欧美成人精品在线| 国产一区二区三区黄视频| 99在线精品视频在线观看| 国产精品久久久久久久久久久久久 | 亚洲黄色大片| 亚洲国产日韩欧美一区二区三区| 亚洲视频在线一区观看| 欧美日韩精品免费| 一本久道久久综合狠狠爱| 欧美高清在线播放| 免费成人性网站| 日韩视频精品| 亚洲一区二区三区高清 | 欧美精品18+| 一区二区三区国产| 99re66热这里只有精品4| 欧美偷拍另类| 免费av成人在线| 欧美日韩国产大片| 欧美在线二区| 欧美国产日本| 久久午夜电影网| 欧美体内she精视频在线观看| 久久av一区二区三区漫画| 久久久久女教师免费一区| 亚洲网站视频福利| 久久久亚洲影院你懂的| 亚洲天堂久久| 欧美电影免费网站| 久久一日本道色综合久久| 欧美激情a∨在线视频播放| 欧美黑人在线播放| 国内一区二区三区在线视频| 欧美一区午夜视频在线观看| 国产亚洲人成网站在线观看| 亚洲美女av电影| 亚洲美女毛片| 欧美激情视频免费观看| 欧美成人精品在线| 精品av久久久久电影| 亚洲欧美一区二区三区久久| 一本大道久久a久久精品综合| 久久综合久久综合九色| 久久亚洲春色中文字幕| 韩国av一区| 免播放器亚洲一区| 亚洲欧洲精品天堂一级| 亚洲精品一区二区三区av| 欧美极品在线视频| 一区二区三区高清| 久久er精品视频| 在线观看的日韩av| 欧美激情一区二区三区在线视频| 亚洲第一区色| 亚洲欧美日韩一区在线| 国产乱码精品| 久久亚洲欧洲| 亚洲免费在线视频一区 二区| 久久狠狠亚洲综合| 日韩视频中文字幕| 国产视频观看一区| 欧美精品一区二区三区四区| 99精品欧美一区二区三区综合在线 | 国产精品99久久久久久久久久久久| 99视频有精品| 国产一区二区av| 欧美伊人久久| 亚洲免费观看高清完整版在线观看| 欧美日韩亚洲高清| 久久aⅴ乱码一区二区三区| 一本久久知道综合久久| 欧美1区免费| 美女视频黄 久久| 日韩午夜免费| 国产精品国产亚洲精品看不卡15| 欧美一区午夜精品| 亚洲无玛一区| 中国成人在线视频| 亚洲三级电影全部在线观看高清| 国产日产亚洲精品| 国产精品乱码久久久久久| 欧美精品一区视频| 欧美精品在线一区| 欧美精品一区二区三区在线播放 | 欧美在线高清| 午夜欧美大尺度福利影院在线看 | 亚洲精品日韩综合观看成人91| 在线视频国产日韩| 亚洲人成亚洲人成在线观看图片| 精品二区久久| 国产一区二区剧情av在线| 国产精品亚洲人在线观看| 性亚洲最疯狂xxxx高清| 亚洲综合丁香| 欧美va天堂在线| 亚洲精品久久久久| 亚洲小说欧美另类社区| 欧美激情一级片一区二区| 欧美激情欧美狂野欧美精品| 亚洲国产精品久久人人爱蜜臀 | 亚洲一区二区日本| 性欧美精品高清| 欧美成人免费全部| 一区二区高清视频| 久久一区二区三区av| 欧美日韩国产小视频在线观看| 国产精品永久免费观看| 亚洲破处大片| 久久久久久久久蜜桃| 亚洲日本电影| 免费欧美日韩| 激情亚洲网站| 性欧美暴力猛交另类hd| 亚洲电影免费观看高清| 欧美在线亚洲| 国产一区自拍视频| 久久国产66| 午夜精品区一区二区三| 欧美视频三区在线播放| 亚洲精品国产拍免费91在线| 久久综合网色—综合色88| 亚洲视频 欧洲视频| 欧美系列亚洲系列| 亚洲综合视频网| 在线性视频日韩欧美| 国产精品视频第一区| 午夜精品理论片| 亚洲一区一卡| 黑人极品videos精品欧美裸| 久久精品天堂| 蘑菇福利视频一区播放| 一本色道久久精品| 亚洲欧美在线x视频| 精品动漫3d一区二区三区免费版| 老司机成人在线视频| 欧美高清视频免费观看| 一区二区高清| 欧美一区2区三区4区公司二百| 一区二区三区精品| 黄色一区二区在线| 亚洲精品欧美日韩专区| 国产欧美日韩三级| 亚洲国产乱码最新视频| 国产情侣一区| 一本大道久久精品懂色aⅴ| 国产伦精品一区二区三区| 亚洲综合首页| 蜜臀a∨国产成人精品| 欧美人与性动交cc0o| 午夜久久影院| 欧美电影资源| 久久亚洲美女| 国产伦理精品不卡| 亚洲精品国产精品国自产在线 | 亚洲丰满在线| 在线一区免费观看| 在线亚洲电影| 免费看亚洲片| 欧美激情中文字幕在线| 揄拍成人国产精品视频| 午夜精品久久久久久久99黑人| 亚洲欧美另类在线观看| 欧美日韩精品久久久| 一区二区三区精品在线| 亚洲欧美日韩中文播放|