Основы языка программирования C++ с применением объектно-ориентированного программирования. Чернышов М.К. - 58 стр.

UptoLike

Составители: 

ȼ ɤɚɱɟɫɬɜɟ ɩɪɢɦɟɪɚ ɩɪɢɜɟɞɟɦ ɨɩɢɫɚɧɢɟ ɤɥɚɫɫɚ stack, ɩɪɟɞɧɚɡɧɚɱɟɧ-
ɧɨɝɨ ɞɥɹ ɩɨɫɬɪɨɟɧɢɹ ɫɬɟɤɨɜ ɮɢɤɫɢɪɨɜɚɧɧɨɝɨ ɦɚɤɫɢɦɚɥɶɧɨɝɨ ɪɚɡɦɟɪɚ ɫ
ɷɥɟɦɟɧɬɚɦɢ ɩɪɨɢɡɜɨɥɶɧɨɝɨ ɬɢɩɚ.
enum BOOLEAN {FALSE, TRUE};
const int EMPTY=-1;
template <class Type>
class stack
{
private:
Type* s; // ɍɤɚɡɚɬɟɥɶ ɧɚ ɦɚɫɫɢɜ ɫɬɟɤɚ
int max_len; // Ɇɚɤɫɢɦɚɥɶɧɚɹ ɞɥɢɧɚ ɫɬɟɤɚ
int top; // ɂɧɞɟɤɫ ɷɥɟɦɟɧɬɚ ɜ ɜɟɪɲɢɧɟ ɫɬɟɤɚ
public:
stack():max_len(100) /* ɤɨɧɫɬɪɭɤɬɨɪ ɛɟɡ ɩɚɪɚɦɟɬɪɨɜ
{s=new Type[100]; top=EMPTY;}
stack(int size):max_len(size) // ȼɬɨɪɨɣ ɤɨɧɫɬɪɭɤɬɨɪ
{s=new Type[size]; top=EMPTY;}
~stack() {delete [] s;} // Ⱦɟɫɬɪɭɤɬɨɪ
void reset() {top=EMPTY;} // Ɉɱɢɫɬɢɬɶ ɫɬɟɤ
void push(Type c) {s[++top]=c;}
Type pop() {return s[top—];}
Type top_of() {return s[top];}
BOOLEAN empty() {return BOOLEAN(top==EMPTY);}
BOOLEAN full() {return BOOLEAN(top==max_len);}
};
ɋɥɟɞɭɟɬ ɨɬɦɟɬɢɬɶ, ɱɬɨ ɜ ɷɬɨɦ ɩɪɢɦɟɪɟ ɫ ɰɟɥɶɸ ɫɨɤɪɚɳɟɧɢɹ ɢɫɯɨɞɧɨɝɨ
ɬɟɤɫɬɚ ɧɟ ɩɪɟɞɭɫɦɨɬɪɟɧ ɤɨɧɬɪɨɥɶ ɜɵɯɨɞɚ ɡɚ ɩɪɟɞɟɥɵ ɫɬɟɤɚ ɜ ɦɟɬɨɞɚɯ
push
ɢ
pop.
ɑɬɨɛɵ ɫɨɡɞɚɬɶ ɷɤɡɟɦɩɥɹɪ ɩɚɪɚɦɟɬɪɢɡɨɜɚɧɧɨɝɨ ɨɛɴɟɤɬɧɨɝɨ ɬɢɩɚ, ɧɭɠɧɨ
ɭɬɨɱɧɢɬɶ ɢɦɹ ɬɢɩɚ ɡɧɚɱɟɧɢɟɦ ɩɚɪɚɦɟɬɪɚ ɜ ɭɝɥɨɜɵɯ ɫɤɨɛɤɚɯ:
stack <int> stack_of_int(50); /* ɋɬɟɤ ɧɚ 50 ɷɥɟɦɟɧɬɨɜ
ɬɢɩɚ int */
stack <myClass> stmc(20); * ɋɬɟɤ ɧɚ 20 ɷɥɟɦɟɧɬɨɜ
ɬɢɩɚ myClass */
ȼ ɩɪɢɜɟɞɟɧɧɨɦ ɩɪɢɦɟɪɟ ɜɫɟ ɤɨɦɩɨɧɟɧɬɵ-ɮɭɧɤɰɢɢ ɨɩɪɟɞɟɥɟɧɵ ɜ ɨɩɢ-
ɫɚɧɢɢ ɤɥɚɫɫɚ. Ʉɨɝɞɚ ɩɨɥɧɨɟ ɨɩɪɟɞɟɥɟɧɢɟ ɮɭɧɤɰɢɢ-ɱɥɟɧɚ ɤɥɚɫɫɚ ɡɚɞɚɟɬɫɹ
ɜɧɟ ɨɩɢɫɚɧɢɹ ɤɥɚɫɫɚ, ɨɧɨ ɞɨɥɠɧɨ ɭɬɨɱɧɹɬɶɫɹ ɨɩɢɫɚɬɟɥɟɦ
template. ɇɚ-
ɩɪɢɦɟɪ, ɟɫɥɢ ɛɵ ɦɟɬɨɞ
top_of ɛɵɥ ɨɩɪɟɞɟɥɟɧ ɜɧɟ ɨɩɢɫɚɧɢɹ ɤɥɚɫɫɚ, ɨɩɪɟ-
ɞɟɥɟɧɢɟ ɢɦɟɥɨ ɛɵ ɜɢɞ:
template <class Type>
Type top_of() {return s[top];}
Ɉɬɦɟɬɢɦ ɧɟɤɨɬɨɪɵɟ ɫɩɟɰɢɮɢɱɟɫɤɢɟ ɱɟɪɬɵ ɨɩɢɫɚɧɢɣ ɩɚɪɚɦɟɬɪɢɡɨɜɚɧ-
ɧɵɯ ɤɥɚɫɫɨɜ:
x ȿɫɥɢ ɜ ɩɚɪɚɦɟɬɪɢɡɨɜɚɧɧɨɦ ɤɥɚɫɫɟ ɨɩɪɟɞɟɥɟɧɵ
friend-ɮɭɧɤɰɢɢ, ɬɨ,
ɤɨɝɞɚ ɬɚɤɚɹ ɮɭɧɤɰɢɹ ɧɟ ɡɚɜɢɫɢɬ ɨɬ ɩɚɪɚɦɟɬɪɚ, ɛɭɞɟɬ ɢɫɩɨɥɶɡɨɜɚɬɶɫɹ
ɟɞɢɧɫɬɜɟɧɧɚɹ
friend-ɮɭɧɤɰɢɹ ɞɥɹ ɜɫɟɯ ɡɧɚɱɟɧɢɣ ɩɚɪɚɦɟɬɪɚ, ɚ ɤɨɝɞɚ
58
    ȼ ɤɚɱɟɫɬɜɟ ɩɪɢɦɟɪɚ ɩɪɢɜɟɞɟɦ ɨɩɢɫɚɧɢɟ ɤɥɚɫɫɚ stack, ɩɪɟɞɧɚɡɧɚɱɟɧ-
ɧɨɝɨ ɞɥɹ ɩɨɫɬɪɨɟɧɢɹ ɫɬɟɤɨɜ ɮɢɤɫɢɪɨɜɚɧɧɨɝɨ ɦɚɤɫɢɦɚɥɶɧɨɝɨ ɪɚɡɦɟɪɚ ɫ
ɷɥɟɦɟɧɬɚɦɢ ɩɪɨɢɡɜɨɥɶɧɨɝɨ ɬɢɩɚ.
     enum BOOLEAN {FALSE, TRUE};
     const int EMPTY=-1;
     template 
     class stack
        {
        private:
         Type* s;                  // ɍɤɚɡɚɬɟɥɶ ɧɚ ɦɚɫɫɢɜ ɫɬɟɤɚ
         int max_len;               // Ɇɚɤɫɢɦɚɥɶɧɚɹ ɞɥɢɧɚ ɫɬɟɤɚ
         int top;            // ɂɧɞɟɤɫ ɷɥɟɦɟɧɬɚ ɜ ɜɟɪɲɢɧɟ ɫɬɟɤɚ
        public:
         stack():max_len(100)     /* ɤɨɧɫɬɪɭɤɬɨɪ ɛɟɡ ɩɚɪɚɦɟɬɪɨɜ
            {s=new Type[100]; top=EMPTY;}
         stack(int size):max_len(size)    // ȼɬɨɪɨɣ ɤɨɧɫɬɪɭɤɬɨɪ
            {s=new Type[size]; top=EMPTY;}
         ~stack() {delete [] s;}                  // Ⱦɟɫɬɪɭɤɬɨɪ
         void reset() {top=EMPTY;}             // Ɉɱɢɫɬɢɬɶ ɫɬɟɤ
         void push(Type c) {s[++top]=c;}
         Type pop() {return s[top—];}
         Type top_of() {return s[top];}
         BOOLEAN empty() {return BOOLEAN(top==EMPTY);}
         BOOLEAN full() {return BOOLEAN(top==max_len);}
        };
    ɋɥɟɞɭɟɬ ɨɬɦɟɬɢɬɶ, ɱɬɨ ɜ ɷɬɨɦ ɩɪɢɦɟɪɟ ɫ ɰɟɥɶɸ ɫɨɤɪɚɳɟɧɢɹ ɢɫɯɨɞɧɨɝɨ
ɬɟɤɫɬɚ ɧɟ ɩɪɟɞɭɫɦɨɬɪɟɧ ɤɨɧɬɪɨɥɶ ɜɵɯɨɞɚ ɡɚ ɩɪɟɞɟɥɵ ɫɬɟɤɚ ɜ ɦɟɬɨɞɚɯ push
ɢ pop.
    ɑɬɨɛɵ ɫɨɡɞɚɬɶ ɷɤɡɟɦɩɥɹɪ ɩɚɪɚɦɟɬɪɢɡɨɜɚɧɧɨɝɨ ɨɛɴɟɤɬɧɨɝɨ ɬɢɩɚ, ɧɭɠɧɨ
ɭɬɨɱɧɢɬɶ ɢɦɹ ɬɢɩɚ ɡɧɚɱɟɧɢɟɦ ɩɚɪɚɦɟɬɪɚ ɜ ɭɝɥɨɜɵɯ ɫɤɨɛɤɚɯ:
     stack  stack_of_int(50);          /* ɋɬɟɤ   ɧɚ 50 ɷɥɟɦɟɧɬɨɜ
                                               ɬɢɩɚ   int */
     stack  stmc(20);               * ɋɬɟɤ   ɧɚ 20 ɷɥɟɦɟɧɬɨɜ
                                               ɬɢɩɚ   myClass */
    ȼ ɩɪɢɜɟɞɟɧɧɨɦ ɩɪɢɦɟɪɟ ɜɫɟ ɤɨɦɩɨɧɟɧɬɵ-ɮɭɧɤɰɢɢ ɨɩɪɟɞɟɥɟɧɵ ɜ ɨɩɢ-
ɫɚɧɢɢ ɤɥɚɫɫɚ. Ʉɨɝɞɚ ɩɨɥɧɨɟ ɨɩɪɟɞɟɥɟɧɢɟ ɮɭɧɤɰɢɢ-ɱɥɟɧɚ ɤɥɚɫɫɚ ɡɚɞɚɟɬɫɹ
ɜɧɟ ɨɩɢɫɚɧɢɹ ɤɥɚɫɫɚ, ɨɧɨ ɞɨɥɠɧɨ ɭɬɨɱɧɹɬɶɫɹ ɨɩɢɫɚɬɟɥɟɦ template. ɇɚ-
ɩɪɢɦɟɪ, ɟɫɥɢ ɛɵ ɦɟɬɨɞ top_of ɛɵɥ ɨɩɪɟɞɟɥɟɧ ɜɧɟ ɨɩɢɫɚɧɢɹ ɤɥɚɫɫɚ, ɨɩɪɟ-
ɞɟɥɟɧɢɟ ɢɦɟɥɨ ɛɵ ɜɢɞ:
     template 
     Type top_of() {return s[top];}
    Ɉɬɦɟɬɢɦ ɧɟɤɨɬɨɪɵɟ ɫɩɟɰɢɮɢɱɟɫɤɢɟ ɱɟɪɬɵ ɨɩɢɫɚɧɢɣ ɩɚɪɚɦɟɬɪɢɡɨɜɚɧ-
ɧɵɯ ɤɥɚɫɫɨɜ:
  x ȿɫɥɢ ɜ ɩɚɪɚɦɟɬɪɢɡɨɜɚɧɧɨɦ ɤɥɚɫɫɟ ɨɩɪɟɞɟɥɟɧɵ friend-ɮɭɧɤɰɢɢ, ɬɨ,
     ɤɨɝɞɚ ɬɚɤɚɹ ɮɭɧɤɰɢɹ ɧɟ ɡɚɜɢɫɢɬ ɨɬ ɩɚɪɚɦɟɬɪɚ, ɛɭɞɟɬ ɢɫɩɨɥɶɡɨɜɚɬɶɫɹ
     ɟɞɢɧɫɬɜɟɧɧɚɹ friend-ɮɭɧɤɰɢɹ ɞɥɹ ɜɫɟɯ ɡɧɚɱɟɧɢɣ ɩɚɪɚɦɟɬɪɚ, ɚ ɤɨɝɞɚ


                                  58