涓嬮潰鐨勭▼渚嬫潵鑷夾n Overview of the C++ Programming Language銆嬶紙5錛? 寮傚父鍜岄敊璇鐞嗭級
紼嬪簭鐢ㄩ旓細浣跨敤C++鐨勫紓甯告満鍒訛紝鎶ュ憡stack鐨勪笂婧㈡垨鑰呬笅婧€傦紙鎴戦傚綋鐨勬妸浠g爜琛ュ叏銆傦級
version 1 婕旂ず浜嗗熀鏈殑寮傚父鐢ㄦ硶銆?br />浠巘ry閲屾姏鍑轟竴涓紓甯革紙瀹炰緥鎴栧璞★級錛岀敱catch閲岀殑綾繪帴鍙椼?br />
聽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聽杈撳嚭緇撴灉錛歟rror:聽stack聽underflow
53聽
54聽
鏀硅繘錛屾垜浠殑絎簩涓増鏈涓嬶細
濡傛灉灝?/p>
聽1聽聽class聽Underflow{聽};聽聽聽//聽涓嬫孩
聽2聽聽聽聽聽class聽Overflow{聽};聽聽聽聽//聽涓婃孩
聽3聽鍜?br />聽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聽
鍒嗗埆鏀規垚濡備笅錛?/p>
聽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聽鍜?br />15聽聽聽聽聽catch(Stack<string>::Overflow&聽e){
16聽聽聽聽聽聽聽聽聽e.error();
17聽聽聽聽聽}
18聽聽聽聽聽catch(Stack<string>::Underflow&聽e){
19聽聽聽聽聽聽聽聽聽e.error();
20聽聽聽聽聽}
21聽
鏀瑰悗鐨勭▼搴忓拰鍘熷厛鐨勫尯鍒湪鍝噷錛岀湅鍑烘潵浜嗗悧錛?鍛靛懙鍛點?br />
褰撶劧錛屾垜浠繕鑳藉皢浠g爜鏀硅繘銆傝繖鏍蜂駭鐢熶簡絎笁涓増鏈?br />
絎笁涓増鏈細version3
鍦⊿tack閲岄潰娣誨姞涓涓被class Stack_error,璁︰nderflow鍜孫verflow閮界戶鎵垮畠錛?/p>
聽1聽
template<class聽T>class聽Stack{
聽2聽
聽聽聽聽//聽
聽聽聽聽
聽3聽
public:
聽4聽
聽聽聽聽class聽stack_error{
聽5聽
聽聽聽聽public:
聽6聽
聽聽聽聽聽聽聽聽virtual聽void聽error(void){銆銆//褰撶劧錛屽彲浠ユ妸瀹冨仛鎴愮函铏氱殑銆傛娊璞$被銆?/span>
聽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聽 鎺ョ潃鎶婁袱涓猚atch鍚堝茍鎴愪竴涓猚atch錛屽涓嬨?br />聽聽try{
聽聽聽聽聽//聽the聽same
聽聽聽聽}
聽聽聽聽catch(Stack<string>::stack_error&聽e){
聽聽聽聽聽聽聽聽e.error();
聽聽聽聽}
榪欎笁涓増鏈殑鍔熻兘鏄竴鏍風殑錛屼絾鐗堟湰瓚婇珮錛屼唬鐮佽秺娓呮櫚錛屼唬鐮佷篃瓚婂鏄撶淮鎶ゃ?br />
濡傛灉鎴戜滑璁捐浜嗕竴涓簱錛堟瘮濡備笂闈㈢殑Stack錛夛紝鍦ㄥ紑濮嬬殑鏃跺欐兂鍒扮殑灝辨槸涓や釜寮傚父錛宱verflow鍜寀nderflow銆傚鏋滄湁version1鍜寁ersion3 榪欎袱縐嶆柟娉曡璁tack錛岄偅涔堝嚱鏁癴()錛堢敤鎴風殑浠g爜錛変篃鍚屾牱version1鍜寁ersion錛撱傚綋涓孌墊棩瀛愯繃鍘諱簡錛屾垜浠噯澶囧啀鍔犲叆涓涓紓甯革紝姣斿midflow()錛堝懙鍛靛懙錛屾垜涔熸兂涓嶅嚭鏈変粈涔堢被浼肩殑寮傚父浜嗭級銆傝繖鏍風殑璇濓紝搴撹璁¤呭鐢ㄦ埛璇達細鈥滄垜浠彂鐜頒簡midflow()寮傚父錛屽茍鍔犲叆搴撲唬鐮佷腑錛岃鎮ㄦ敼鍐欐偍鐨勪唬鐮乫()銆傗?br />榪欐牱鎴戜滑鐨剉ersion1寰椾慨鏀規垚濡備笅褰㈠紡錛?br />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){聽聽聽聽//鎴戜滑鐨勬壘鍒版墍鏈夋墤鎹塻tack寮傚父鐨勪唬鐮侊紝騫跺姞鍏ヨ繖涓ゅ彞銆?/span>
聽聽聽聽聽聽聽聽聽聽cerr聽<<聽"error:聽stack聽midflow"聽<<聽endl;
聽聽聽聽}
}
鑰寁ersion3鐢變簬midflow()緇ф壙浜唖tack_error銆傝屽叾鎺ュ彛榪樻槸涓鏍鳳紝瀹㈡埛浠g爜灝辨棤闇鏇存敼浜嗐?br />
聽瀹屾瘯銆傞灎韜?璇峰澶氫氦嫻侊紒
闄勶細version3瀹屾暣浠g爜錛?
聽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聽

]]>