┴ⁿ ≡φ ╤≥≡α≤±≥≡α∩. ┬ΓσΣσφΦσ Γ  τ√Ω ╤Φ++, ╩δα±±√
Server for Information Technologies ╤σ≡Γσ≡ ╚φ⌠ε≡∞α÷Φεφφ√⌡ ╥σ⌡φεδεπΦΘ
±εΣσ≡µΦ≥ ∞ε≡σ(!) αφαδΦ≥Φ≈σ±ΩεΘ Φφ⌠ε≡∞α÷ΦΦ

╤σ≡Γσ≡ ∩εΣΣσ≡µΦΓασ≥± 
╓σφ≥≡ε∞ ╚φ⌠ε≡∞α÷Φεφφ√⌡ ╥σ⌡φεδεπΦΘ
(095) 932-9212, 932-9213, 939-0783
E-mail: info@citforum.ru


├δαΓα 5

╩δα±±√

▌≥Φ ≥Φ∩√ φσ "αß±≥≡αΩ≥φ√", εφΦ ±≥εδⁿ µσ ≡σαδⁿφ√, ΩαΩ int Φ float. - ─≤π ╠αΩ╚δ≡εΘ

┬ ²≥εΘ πδαΓσ ε∩Φ±√Γα■≥±  Γετ∞εµφε±≥Φ ε∩≡σΣσδσφΦ  φεΓ√⌡ ≥Φ∩εΓ Γ C++, Σδ  Ωε≥ε≡√⌡ Σε±≥≤∩ Ω Σαφφ√∞ επ≡αφΦ≈σφ ταΣαφφ√∞ ∞φεµσ±≥Γε∞ ⌠≤φΩ÷ΦΘ Σε±≥≤∩α. ╬ß· ±φ ■≥±  ±∩ε±εß√ τα∙Φ≥√ ±≥≡≤Ω≥≤≡√ Σαφφ√⌡, σσ ΦφΦ÷ΦαδΦτα÷ΦΦ, Σε±≥≤∩α Ω φσΘ Φ, φαΩεφσ÷, σσ ≤φΦ≈≥εµσφΦ . ╧≡Φ∞σ≡√ ±εΣσ≡µα≥ ∩≡ε±≥√σ Ωδα±±√ Σδ  ≡αßε≥√ ± ≥αßδΦ÷σΘ Φ∞σφ, ∞αφΦ∩≤δ ÷ΦΦ ±≥σΩε∞, ≡αßε≥≤ ± ∞φεµσ±≥Γε∞ Φ ≡σαδΦτα÷Φ■ ΣΦ±Ω≡Φ∞ΦφΦ≡≤■∙σπε (≥ε σ±≥ⁿ, "φαΣσµφεπε") εß·σΣΦφσφΦ . ─Γσ ±δσΣ≤■∙Φσ πδαΓ√ Σε∩εδφ ≥ ε∩Φ±αφΦσ Γετ∞εµφε±≥σΘ ε∩≡σΣσδσφΦ  φεΓ√⌡ ≥Φ∩εΓ Γ C++ Φ ∩ετφαΩε∞ ≥ ≈Φ≥α≥σδ  σ∙σ ± φσΩε≥ε≡√∞Φ Φφ≥σ≡σ±φ√∞Φ ∩≡Φ∞σ≡α∞Φ.

5.1 ╟φαΩε∞±≥Γε Φ Ω≡α≥ΩΦΘ εßτε≡

╧≡σΣφατφα≈σφΦσ ∩εφ ≥Φ  Ωδα±±α, Ωε≥ε≡ε∞≤ ∩ε±Γ ∙σφ√ ²≥α Φ ΣΓσ ∩ε±δσΣ≤■∙Φσ πδαΓ√, ±ε±≥εΦ≥ Γ ≥ε∞, ≈≥εß√ ∩≡σΣε±≥αΓΦ≥ⁿ ∩≡επ≡α∞∞Φ±≥≤ Φφ±≥≡≤∞σφ≥ Σδ  ±ετΣαφΦ  φεΓ√⌡ ≥Φ∩εΓ, ±≥εδⁿ µσ ≤Σεßφ√⌡ Γ εß≡α∙σφΦΦ ±Ωεδⁿ Φ Γ±≥≡εσφφ√σ ≥Φ∩√. ┬ ΦΣσαδσ ≥Φ∩, ε∩≡σΣσδ σ∞√Θ ∩εδⁿτεΓα≥σδσ∞, ±∩ε±εßε∞ Φ±∩εδⁿτεΓαφΦ  φσ Σεδµσφ ε≥δΦ≈α≥ⁿ±  ε≥ Γ±≥≡εσφφ√⌡ ≥Φ∩εΓ, ≥εδⁿΩε ±∩ε±εßε∞ ±ετΣαφΦ .
╥Φ∩ σ±≥ⁿ ΩεφΩ≡σ≥φεσ ∩≡σΣ±≥αΓδσφΦσ φσΩε≥ε≡εΘ Ωεφ÷σ∩÷ΦΦ (∩εφ ≥Φ ). ═α∩≡Φ∞σ≡, Φ∞σ■∙ΦΘ±  Γ C++ ≥Φ∩ float ± σπε ε∩σ≡α÷Φ ∞Φ +, -, * Φ ≥.Σ. εßσ±∩σ≈ΦΓασ≥ επ≡αφΦ≈σφφ≤■, φε ΩεφΩ≡σ≥φ≤■ Γσ≡±Φ■ ∞α≥σ∞α≥Φ≈σ±Ωεπε ∩εφ ≥Φ  ΣσΘ±≥ΓΦ≥σδⁿφεπε ≈Φ±δα. ═εΓ√Θ ≥Φ∩ ±ετΣασ≥±  Σδ  ≥επε, ≈≥εß√ Σα≥ⁿ ±∩σ÷Φαδⁿφεσ Φ ΩεφΩ≡σ≥φεσ ε∩≡σΣσδσφΦσ ∩εφ ≥Φ , Ωε≥ε≡ε∞≤ φΦ≈≥ε ∩≡ ∞ε Φ ε≈σΓΦΣφε ±≡σΣΦ Γ±≥≡εσφφ√⌡ ≥Φ∩εΓ φσ ε≥Γσ≈ασ≥. ═α∩≡Φ∞σ≡, Γ ∩≡επ≡α∞∞σ, Ωε≥ε≡α  ≡αßε≥ασ≥ ± ≥σδσ⌠εφε∞, ∞εµφε ß√δε ß√ ±ετΣα≥ⁿ ≥Φ∩ trunk_module (²δσ∞σφ≥ δΦφΦΦ), α Γ ∩≡επ≡α∞∞σ εß≡αßε≥ΩΦ ≥σΩ±≥εΓ - ≥Φ∩ list_of_paragraphs (±∩Φ±εΩ ∩α≡απ≡α⌠εΓ). ╩αΩ ∩≡αΓΦδε, ∩≡επ≡α∞∞≤, Γ Ωε≥ε≡εΘ ±ετΣα■≥±  ≥Φ∩√, ⌡ε≡ε°ε ε≥Γσ≈α■∙Φσ ∩εφ ≥Φ ∞ ∩≡ΦδεµσφΦ , ∩εφ ≥ⁿ δσπ≈σ, ≈σ∞ ∩≡επ≡α∞∞≤, Γ Ωε≥ε≡εΘ ²≥ε φσ Σσδασ≥± . ╒ε≡ε°ε Γ√ß≡αφφ√σ ≥Φ∩√, ε∩≡σΣσδ σ∞√σ ∩εδⁿτεΓα≥σδσ∞, Σσδα■≥ ∩≡επ≡α∞∞≤ ßεδσσ ≈σ≥ΩεΘ Φ Ωε≡ε≥ΩεΘ. ▌≥ε ≥αΩµσ ∩ετΓεδ σ≥ Ωε∞∩Φδ ≥ε≡≤ εßφα≡≤µΦΓα≥ⁿ φσΣε∩≤±≥Φ∞√σ Φ±∩εδⁿτεΓαφΦ  εß·σΩ≥εΓ, Ωε≥ε≡√σ Γ ∩≡ε≥ΦΓφε∞ ±δ≤≈ασ ε±≥αφ≤≥±  φσεßφα≡≤µσφφ√∞Φ Σε ≥σ±≥Φ≡εΓαφΦ  ∩≡επ≡α∞∞√.
┬ ε∩≡σΣσδσφΦΦ φεΓεπε ≥Φ∩α ε±φεΓφα  ΦΣσ  - ε≥ΣσδΦ≥ⁿ φσ±≤∙σ±≥Γσφφ√σ ∩εΣ≡εßφε±≥Φ ≡σαδΦτα÷ΦΦ (φα∩≡Φ∞σ≡, ⌠ε≡∞α≥ Σαφφ√⌡, Ωε≥ε≡√σ Φ±∩εδⁿτ≤■≥±  Σδ  ⌡≡αφσφΦ  εß·σΩ≥α ≥Φ∩α) ε≥ ≥σ⌡ Ωα≈σ±≥Γ, Ωε≥ε≡√σ ±≤∙σ±≥Γσφφ√ Σδ  σπε ∩≡αΓΦδⁿφεπε Φ±∩εδⁿτεΓαφΦ  (φα∩≡Φ∞σ≡, ∩εδφ√Θ ±∩Φ±εΩ ⌠≤φΩ÷ΦΘ, Ωε≥ε≡√σ Φ∞σ■≥ Σε±≥≤∩ Ω Σαφφ√∞). ╥αΩεσ ≡ατΣσδσφΦσ ∞εµφε ε∩Φ±α≥ⁿ ≥αΩ, ≈≥ε ≡αßε≥α ±ε ±≥≡≤Ω≥≤≡εΘ Σαφφ√⌡ Φ Γφ≤≥≡σφφΦ∞Φ αΣ∞ΦφΦ±≥≡α≥ΦΓφ√∞Φ ∩εΣ∩≡επ≡α∞∞α∞Φ ε±≤∙σ±≥Γδ σ≥±  ≈σ≡στ ±∩σ÷Φαδⁿφ√Θ Φφ≥σ≡⌠σΘ± (ΩαφαδΦ≡≤σ≥± ).
▌≥α πδαΓα ±ε±≥εΦ≥ Φτ ≈σ≥√≡σ⌡ ∩≡αΩ≥Φ≈σ±ΩΦ ε≥Σσδⁿφ√⌡ ≈α±≥σΘ:

  1. ╩δα±±√ Φ ╫δσφ√. ▌≥ε≥ ≡ατΣσδ τφαΩε∞Φ≥ ± ε±φεΓφ√∞ ∩εφ ≥Φσ∞ ≥Φ∩α, ε∩≡σΣσδ σ∞επε ∩εδⁿτεΓα≥σδσ∞, Ωε≥ε≡√Θ φατ√Γασ≥±  Ωδα±± (class). ─ε±≥≤∩ Ω εß·σΩ≥α∞ Ωδα±±α ∞εµσ≥ επ≡αφΦ≈ΦΓα≥ⁿ±  φαßε≡ε∞ ⌠≤φΩ÷ΦΘ, Ωε≥ε≡√σ ε∩Φ±αφ√ ΩαΩ ≈α±≥ⁿ ²≥επε Ωδα±±α. ╥αΩΦσ ⌠≤φΩ÷ΦΦ φατ√Γα■≥±  ⌠≤φΩ÷Φ ∞Φ ≈δσφα∞Φ. ╬ß·σΩ≥√ Ωδα±±α ±ετΣα■≥±  Φ ΦφΦ÷ΦαδΦτΦ≡≤■≥±  ⌠≤φΩ÷Φ ∞Φ ≈δσφα∞Φ, ±∩σ÷Φαδⁿφε Σδ  ²≥εΘ ÷σδΦ ε∩Φ±αφφ√∞Φ. ▌≥Φ ⌠≤φΩ÷ΦΦ φατ√Γα■≥±  Ωεφ±≥≡≤Ω≥ε≡α∞Φ. ╘≤φΩ÷Φ  ≈δσφ ∞εµσ≥ ß√≥ⁿ ±∩σ÷Φαδⁿφ√∞ εß≡ατε∞ ε∩Φ±αφα Σδ  "ε≈Φ±≥ΩΦ" ΩαµΣεπε Ωδα±±εΓεπε εß·σΩ≥α ∩≡Φ σπε ≤φΦ≈≥εµσφΦΦ. ╥αΩα  ⌠≤φΩ÷Φ  φατ√Γασ≥±  Σσ±≥≡≤Ω≥ε≡ε∞.
  2. ╚φ≥σ≡⌠σΘ±√ Φ ╨σαδΦτα÷ΦΦ. ┬ ²≥ε∞ ≡ατΣσδσ ∩≡ΦΓεΣΦ≥±  ΣΓα ∩≡Φ∞σ≡α ≥επε, ΩαΩ Ωδα±± ∩≡εσΩ≥Φ≡≤σ≥± , ≡σαδΦτ≤σ≥±  Φ Φ±∩εδⁿτ≤σ≥± .
  3. ─≡≤τⁿ  Φ ╬ß·σΣΦφσφΦ . ┬ ²≥ε∞ ≡ατΣσδσ ∩≡ΦΓεΣΦ≥±  ∞φεπε Σε∩εδφΦ≥σδⁿφ√⌡ ∩εΣ≡εßφε±≥σΘ, Ωα±α■∙Φ⌡±  Ωδα±±εΓ. ┬ φσ∞ ∩εΩαταφε, ΩαΩ ∩≡σΣε±≥αΓΦ≥ⁿ Σε±≥≤∩ Ω ταΩ≡√≥εΘ ≈α±≥Φ Ωδα±±α ⌠≤φΩ÷ΦΦ, Ωε≥ε≡α  φσ  Γδ σ≥±  ≈δσφε∞ ²≥επε Ωδα±±α. ╥αΩα  ⌠≤φΩ÷Φ  φατ√Γασ≥±  Σ≡≤π (friend). ┬ ²≥ε∞ ≡ατΣσδσ ∩εΩαταφε ≥αΩµσ, ΩαΩ ε∩≡σΣσδΦ≥ⁿ ΣΦ±Ω≡Φ∞ΦφΦ≡≤■∙σσ εß·σΣΦφσφΦσ.
  4. ╩εφ±≥≡≤Ω≥ε≡√ Φ ─σ±≥≡≤Ω≥ε≡√. ╬ß·σΩ≥ ∞εµσ≥ ±ετΣαΓα≥ⁿ±  ΩαΩ αΓ≥ε∞α≥Φ≈σ±ΩΦΘ, ±≥α≥Φ≈σ±ΩΦΘ ΦδΦ ΩαΩ εß·σΩ≥ Γ ±ΓεßεΣφεΘ ∩α∞ ≥Φ. ╬ß·σΩ≥ ∞εµσ≥ ≥αΩµσ ß√≥ⁿ ≈δσφε∞ φσΩε≥ε≡εΘ ±εΓεΩ≤∩φε±≥Φ (≥Φ∩α ΓσΩ≥ε≡α ΦδΦ Ωδα±±α), Ωε≥ε≡α  Γ ±Γε■ ε≈σ≡σΣⁿ ∞εµσ≥ ≡ατ∞σ∙α≥ⁿ±  εΣφΦ∞ Φτ ²≥Φ⌡ ≥≡σ⌡ ±∩ε±εßεΓ. ─εΓεδⁿφε ∩εΣ≡εßφε εß· ±φ σ≥±  Φ±∩εδⁿτεΓαφΦσ Ωεφ±≥≡≤Ω≥ε≡εΓ Φ Σσ±≥≡≤Ω≥ε≡εΓ.

5.2 ╩δα±±√ Φ ╫δσφ√

5.2.1 ╘≤φΩ÷ΦΦ ╫δσφ√
5.2.2 ╩δα±±√
5.2.3 ╤±√δΩΦ φα ╤σß 
5.2.4 ╚φΦ÷ΦαδΦτα÷Φ 
5.2.5 ╬≈Φ±≥Ωα
5.2.6 Inline

╩δα±± - ²≥ε ε∩≡σΣσδ σ∞√Θ ∩εδⁿτεΓα≥σδσ∞ ≥Φ∩. ▌≥ε≥ ≡ατΣσδ τφαΩε∞Φ≥ ± ε±φεΓφ√∞Φ ±≡σΣ±≥Γα∞Φ ε∩≡σΣσδσφΦ  Ωδα±±α, ±ετΣαφΦ  εß·σΩ≥α Ωδα±±α, ≡αßε≥√ ± ≥αΩΦ∞Φ εß·σΩ≥α∞Φ Φ, φαΩεφσ÷, ≤φΦ≈≥εµσφΦ  ≥αΩΦ⌡ εß·σΩ≥εΓ ∩ε±δσ Φ±∩εδⁿτεΓαφΦ .

5.2.1 ╘≤φΩ÷ΦΦ ╫δσφ√

╨α±±∞ε≥≡Φ∞ ≡σαδΦτα÷Φ■ ∩εφ ≥Φ  Σα≥√ ± Φ±∩εδⁿτεΓαφΦσ∞ struct Σδ  ≥επε, ≈≥εß√ ε∩≡σΣσδΦ≥ⁿ ∩≡σΣ±≥αΓδσφΦσ Σα≥√ date Φ ∞φεµσ±≥Γα ⌠≤φΩ÷ΦΘ Σδ  ≡αßε≥√ ± ∩σ≡σ∞σφφ√∞Φ ²≥επε ≥Φ∩α:

  struct date { int month, day, year; };
      // Σα≥α:     ∞σ± ÷, Σσφⁿ, πεΣ  }
  date today;
  void set_date(date*, int, int, int);
  void next_date(date*);
  void print_date(date*);
  // ...

═ΦΩαΩεΘ  ΓφεΘ ±Γ τΦ ∞σµΣ≤ ⌠≤φΩ÷Φ ∞Φ Φ ≥Φ∩ε∞ Σαφφ√⌡ φσ≥. ╥αΩ≤■ ±Γ τⁿ ∞εµφε ≤±≥αφεΓΦ≥ⁿ, ε∩Φ±αΓ ⌠≤φΩ÷ΦΦ ΩαΩ ≈δσφ√:
  struct date {
      int month, day, year;

  void set(int, int, int);
  void get(int*, int*, int*);
  void next();
  void print();
  };

╘≤φΩ÷ΦΦ, ε∩Φ±αφφ√σ ≥αΩΦ∞ εß≡ατε∞, φατ√Γα■≥±  ⌠≤φΩ÷Φ ∞Φ ≈δσφα∞Φ Φ ∞επ≤≥ Γ√τ√Γα≥ⁿ±  ≥εδⁿΩε Σδ  ±∩σ÷ΦαδⁿφεΘ ∩σ≡σ∞σφφεΘ ±εε≥Γσ≥±≥Γ≤■∙σπε ≥Φ∩α ± Φ±∩εδⁿτεΓαφΦσ∞ ±≥αφΣα≡≥φεπε ±Φφ≥αΩ±Φ±α Σδ  Σε±≥≤∩α Ω ≈δσφα∞ ±≥≡≤Ω≥≤≡√. ═α∩≡Φ∞σ≡:
  date today;         // ±σπεΣφ 
  date my_burthday;   // ∞εΘ Σσφⁿ ≡εµΣσφΦ 

  void f()
  {
      my_burthday.set(30,12,1950);
      today.set(18,1,1985);

      my_burthday.print();
      today.next();
  }

╧ε±ΩεδⁿΩ≤ ≡ατφ√σ ±≥≡≤Ω≥≤≡√ ∞επ≤≥ Φ∞σ≥ⁿ ⌠≤φΩ÷ΦΦ ≈δσφ√ ± εΣΦφαΩεΓ√∞Φ Φ∞σφα∞Φ, ∩≡Φ ε∩≡σΣσδσφΦΦ ⌠≤φΩ÷ΦΦ ≈δσφα φσεß⌡εΣΦ∞ε ≤Ωατ√Γα≥ⁿ Φ∞  ±≥≡≤Ω≥≤≡√:
  void date::next()
  {
      if ( ++day > 28 ) {
          // Σσδασ≥ ±δεµφ≤■ ≈α±≥ⁿ ≡αßε≥√
      }
  }

┬ ⌠≤φΩ÷ΦΦ ≈δσφσ Φ∞σφα ≈δσφεΓ ∞επ≤≥ Φ±∩εδⁿτεΓα≥ⁿ±  ßστ  ΓφεΘ ±±√δΩΦ φα εß·σΩ≥. ┬ ²≥ε∞ ±δ≤≈ασ Φ∞  ε≥φε±Φ≥±  Ω ≈δσφ≤ ≥επε εß·σΩ≥α, Σδ  Ωε≥ε≡επε ⌠≤φΩ÷Φ  ß√δα Γ√τΓαφα.

5.2.2 ╩δα±±√

╬∩Φ±αφΦσ date Γ ∩≡σΣ√Σ≤∙σ∞ ∩εΣ≡ατΣσδσ Σασ≥ ∞φεµσ±≥Γε ⌠≤φΩ÷ΦΘ Σδ  ≡αßε≥√ ± date, φε φσ ≤Ωατ√Γασ≥, ≈≥ε ²≥Φ ⌠≤φΩ÷ΦΦ Σεδµφ√ ß√≥ⁿ σΣΦφ±≥Γσφφ√∞Φ Σδ  Σε±≥≤∩α Ω εß·σΩ≥α∞ ≥Φ∩α date. ▌≥ε επ≡αφΦ≈σφΦσ ∞εµφε φαδεµΦ≥ⁿ Φ±∩εδⁿτ≤  Γ∞σ±≥ε struct class:

  class date {
      int month, day, year;
  public:
      void set(int, int, int);
      void get(int*, int*, int*);
      void next();
      void print();
  };

╠σ≥Ωα public ΣσδΦ≥ ≥σδε Ωδα±±α φα ΣΓσ ≈α±≥Φ. ╚∞σφα Γ ∩σ≡ΓεΘ, ταΩ≡√≥εΘ ≈α±≥Φ, ∞επ≤≥ Φ±∩εδⁿτεΓα≥ⁿ±  ≥εδⁿΩε ⌠≤φΩ÷Φ ∞Φ ≈δσφα∞Φ. ┬≥ε≡α , ε≥Ω≡√≥α  ≈α±≥ⁿ, ±ε±≥αΓδ σ≥ Φφ≥σ≡⌠σΘ± Ω εß·σΩ≥≤ Ωδα±±α. Struct - ²≥ε ∩≡ε±≥ε class, ≤ Ωε≥ε≡επε Γ±σ ≈δσφ√ εß∙Φσ, ∩ε²≥ε∞≤ ⌠≤φΩ÷ΦΦ ≈δσφ√ ε∩≡σΣσδ ■≥±  Φ Φ±∩εδⁿτ≤■≥±  ≥ε≈φε ≥αΩ µσ, ΩαΩ Γ ∩≡σΣ√Σ≤∙σ∞ ±δ≤≈ασ. ═α∩≡Φ∞σ≡:
  void date::ptinr()        // ∩σ≈α≥ασ≥ Γ τα∩Φ±Φ, ∩≡Φφ ≥εΘ Γ ╤╪└
  {
      cout << month << "/" << day << "/" year;
  }

╬ΣφαΩε ⌠≤φΩ÷ΦΦ φσ ≈δσφ√ ε≥πε≡εµσφ√ ε≥ Φ±∩εδⁿτεΓαφΦ  ταΩ≡√≥√⌡ ≈δσφεΓ Ωδα±±α date. ═α∩≡Φ∞σ≡:
  void backdate()
  {
      today.day--;        // ε°ΦßΩα
  }

┬ ≥ε∞, ≈≥ε Σε±≥≤∩ Ω ±≥≡≤Ω≥≤≡σ Σαφφ√⌡ επ≡αφΦ≈σφ  Γφε ε∩Φ±αφφ√∞ ±∩Φ±Ωε∞ ⌠≤φΩ÷ΦΘ, σ±≥ⁿ φσ±ΩεδⁿΩε ∩≡σΦ∞≤∙σ±≥Γ. ╦■ßα  ε°ΦßΩα, Ωε≥ε≡α  ∩≡ΦΓεΣΦ≥ Ω ≥ε∞≤, ≈≥ε Σα≥α ∩≡ΦφΦ∞ασ≥ φσΣε∩≤±≥Φ∞εσ τφα≈σφΦσ (φα∩≡Φ∞σ≡, ─σΩαß≡ⁿ 36, 1985) Σεδµφα ß√≥ⁿ Γ√τΓαφα ΩεΣε∞ ⌠≤φΩ÷ΦΦ ≈δσφα, ∩ε²≥ε∞≤ ∩σ≡Γα  ±≥αΣΦ  ε≥δαΣΩΦ, δεΩαδΦτα÷Φ , Γ√∩εδφ σ≥±  σ∙σ Σε ≥επε, ΩαΩ ∩≡επ≡α∞∞α ß≤Σσ≥ τα∩≤∙σφα. ▌≥ε ≈α±≥φ√Θ ±δ≤≈αΘ εß∙σπε ≤≥Γσ≡µΣσφΦ , ≈≥ε δ■ßεσ Φτ∞σφσφΦσ Γ ∩εΓσΣσφΦΦ ≥Φ∩α date ∞εµσ≥ Φ Σεδµφε Γ√τ√Γα≥ⁿ±  Φτ∞σφσφΦ ∞Φ Γ σπε ≈δσφα⌡. ─≡≤πεσ ∩≡σΦ∞≤∙σ±≥Γε - ²≥ε ≥ε, ≈≥ε ∩ε≥σφ÷Φαδⁿφε∞≤ ∩εδⁿτεΓα≥σδ■ ≥αΩεπε ≥Φ∩α φ≤µφε ß≤Σσ≥ ≥εδⁿΩε ≤τφα≥ⁿ ε∩≡σΣσδσφΦσ ⌠≤φΩ÷ΦΘ ≈δσφεΓ, ≈≥εß√ φα≤≈Φ≥ⁿ±  Φ∞ ∩εδⁿτεΓα≥ⁿ± .
╟α∙Φ≥α ταΩ≡√≥√⌡ Σαφφ√⌡ ±Γ ταφα ± επ≡αφΦ≈σφΦσ∞ Φ±∩εδⁿτεΓαφΦ  Φ∞σφ ≈δσφεΓ Ωδα±±α. ▌≥ε ∞εµφε εßεΘ≥Φ ± ∩ε∞ε∙ⁿ■ ∞αφΦ∩≤δ ÷ΦΦ αΣ≡σ±α∞Φ, φε ²≥ε ≤µσ, Ωεφσ≈φε, µ≤δⁿφΦ≈σ±≥Γε.

5.2.3 ╤±√δΩΦ φα ╤σß 

┬ ⌠≤φΩ÷ΦΦ ≈δσφσ φα ≈δσφ√ εß·σΩ≥α, Σδ  Ωε≥ε≡επε εφα ß√δα Γ√τΓαφα, ∞εµφε ±±√δα≥ⁿ±  φσ∩ε±≡σΣ±≥Γσφφε. ═α∩≡Φ∞σ≡:

class x {
      int m;
  public:
      int readm() { return m; }
  };

  x aa;
  x bb;

  void f()
  {
      int a = aa.readm();
      int b = bb.readm();
      // ...
  }

┬ ∩σ≡Γε∞ Γ√τεΓσ ≈δσφα member() m ε≥φε±Φ≥±  Ω aa.m, α Γε Γ≥ε≡ε∞ - Ω bb.m.
╙Ωατα≥σδⁿ φα εß·σΩ≥, Σδ  Ωε≥ε≡επε Γ√τΓαφα ⌠≤φΩ÷Φ  ≈δσφ,  Γδ σ≥±  ±Ω≡√≥√∞ ∩α≡α∞σ≥≡ε∞ ⌠≤φΩ÷ΦΦ. ═α ²≥ε≥ φσ Γφ√Θ ∩α≡α∞σ≥≡ ∞εµφε ±±√δα≥ⁿ±   Γφε ΩαΩ φα this. ┬ ΩαµΣεΘ ⌠≤φΩ÷ΦΦ Ωδα±±α x ≤Ωατα≥σδⁿ this φσ Γφε ε∩Φ±αφ ΩαΩ
  x* this;

Φ ΦφΦ÷ΦαδΦτΦ≡εΓαφ ≥αΩ, ≈≥ε εφ ≤Ωατ√Γασ≥ φα εß·σΩ≥, Σδ  Ωε≥ε≡επε ß√δα Γ√τΓαφα ⌠≤φΩ÷Φ  ≈δσφ. this φσ ∞εµσ≥ ß√≥ⁿ ε∩Φ±αφ  Γφε, ≥αΩ ΩαΩ ²≥ε Ωδ■≈σΓεσ ±δεΓε. ╩δα±± x ∞εµφε ²ΩΓΦΓαδσφ≥φ√∞ εß≡ατε∞ ε∩Φ±α≥ⁿ ≥αΩ:
  class x {
      int m;
  public:
      int readm() { return this->m; }
  };

╧≡Φ ±±√δΩσ φα ≈δσφ√ Φ±∩εδⁿτεΓαφΦσ this ΦτδΦ°φσ. ├δαΓφ√∞ εß≡ατε∞ this Φ±∩εδⁿτ≤σ≥±  ∩≡Φ φα∩Φ±αφΦΦ ⌠≤φΩ÷ΦΘ ≈δσφεΓ, Ωε≥ε≡√σ ∞αφΦ∩≤δΦ≡≤■≥ φσ∩ε±≡σΣ±≥Γσφφε ≤Ωατα≥σδ ∞Φ. ╥Φ∩Φ≈φ√Θ ∩≡Φ∞σ≡ ²≥επε - ⌠≤φΩ÷Φ , Γ±≥αΓδ ■∙α  τΓσφε Γ ΣΓαµΣ√ ±Γ ταφφ√Θ ±∩Φ±εΩ:
  class dlink {
      dlink* pre;    // ∩≡σΣ°σ±≥Γ≤■∙ΦΘ
      dlink* suc;    // ±δσΣ≤■∙ΦΘ
  public:
      void append(dlink*);
      // ...
  };

  void dlink::append(dlink* p)
  {
      p->suc = suc;    // ≥ε σ±≥ⁿ, p->suc = this->suc
      p->pre = this;   //  Γφεσ Φ±∩εδⁿτεΓαφΦσ this
      suc->pre = p;    // ≥ε σ±≥ⁿ, this->suc->pre = p
      suc = p;         // ≥ε σ±≥ⁿ, this->suc = p
  }

  dlink* list_head;

  void f(dlink*a, dlink *b)
  {
      // ...
      list_head->append(a);
      list_head->append(b);
  }

╓σ∩ε≈ΩΦ ≥αΩεΘ εß∙σΘ ∩≡Φ≡εΣ√  Γδ ■≥±  ε±φεΓεΘ Σδ  ±∩Φ±ΩεΓ√⌡ Ωδα±±εΓ, Ωε≥ε≡√σ ε∩Φ±√Γα■≥±  Γ
├δαΓσ 7. ╫≥εß√ ∩≡Φ±εσΣΦφΦ≥ⁿ τΓσφε Ω ±∩Φ±Ω≤ φσεß⌡εΣΦ∞ε εßφεΓΦ≥ⁿ εß·σΩ≥√, φα Ωε≥ε≡√σ ≤Ωατ√Γα■≥ ≤Ωατα≥σδΦ this, pre Φ suc (≥σΩ≤∙ΦΘ, ∩≡σΣ√Σ≤∙ΦΘ Φ ∩ε±δσΣ≤■∙ΦΘ). ┬±σ εφΦ ≥Φ∩α dlink, ∩ε²≥ε∞≤ ⌠≤φΩ÷Φ  ≈δσφ dlink::append() Φ∞σσ≥ Ω φΦ∞ Σε±≥≤∩. ┼ΣΦφΦ÷σΘ τα∙Φ≥√ Γ C++  Γδ σ≥±  class, α φσ ε≥Σσδⁿφ√Θ εß·σΩ≥ Ωδα±±α.

5.2.4 ╚φΦ÷ΦαδΦτα÷Φ 

╚±∩εδⁿτεΓαφΦσ Σδ  εßσ±∩σ≈σφΦ  ΦφΦ÷ΦαδΦτα÷ΦΦ εß·σΩ≥α Ωδα±±α ⌠≤φΩ÷ΦΘ Γ≡εΣσ set_date() (≤±≥αφεΓΦ≥ⁿ Σα≥≤) φσ²δσπαφ≥φε Φ ≈≡σΓα≥ε ε°ΦßΩα∞Φ. ╧ε±ΩεδⁿΩ≤ φΦπΣσ φσ ≤≥Γσ≡µΣασ≥± , ≈≥ε εß·σΩ≥ Σεδµσφ ß√≥ⁿ ΦφΦ÷ΦαδΦτΦ≡εΓαφ, ≥ε ∩≡επ≡α∞∞Φ±≥ ∞εµσ≥ ταß√≥ⁿ ²≥ε ±Σσδα≥ⁿ, ΦδΦ (≈≥ε ∩≡ΦΓεΣΦ≥, ΩαΩ ∩≡αΓΦδε, Ω ±≥εδⁿ µσ ≡ατ≡≤°Φ≥σδⁿφ√∞ ∩ε±δσΣ±≥ΓΦ ∞) ±Σσδα≥ⁿ ²≥ε ΣΓαµΣ√. ┼±≥ⁿ ßεδσσ ⌡ε≡ε°ΦΘ ∩εΣ⌡εΣ: Σα≥ⁿ Γετ∞εµφε±≥ⁿ ∩≡επ≡α∞∞Φ±≥≤ ε∩Φ±α≥ⁿ ⌠≤φΩ÷Φ■,  Γφε ∩≡σΣφατφα≈σφφ≤■ Σδ  ΦφΦ÷ΦαδΦτα÷ΦΦ εß·σΩ≥εΓ. ╧ε±ΩεδⁿΩ≤ ≥αΩα  ⌠≤φΩ÷Φ  Ωεφ±≥≡≤Φ≡≤σ≥ τφα≈σφΦ  Σαφφεπε ≥Φ∩α, εφα φατ√Γασ≥±  Ωεφ±≥≡≤Ω≥ε≡ε∞. ╩εφ±≥≡≤Ω≥ε≡ ≡α±∩ετφασ≥±  ∩ε ≥ε∞≤, ≈≥ε Φ∞σσ≥ ≥ε µσ Φ∞ , ≈≥ε Φ ±α∞ Ωδα±±. ═α∩≡Φ∞σ≡:

  class date {
      // ...
      date(int, int, int);
  };

╩επΣα Ωδα±± Φ∞σσ≥ Ωεφ±≥≡≤Ω≥ε≡, Γ±σ εß·σΩ≥√ ²≥επε Ωδα±±α ß≤Σ≤≥ ΦφΦ÷ΦαδΦτΦ≡εΓα≥ⁿ± . ┼±δΦ Σδ  Ωεφ±≥≡≤Ω≥ε≡α φ≤µφ√ ∩α≡α∞σ≥≡√, εφΦ Σεδµφ√ ΣαΓα≥ⁿ± :
  date today = date(23,6,1983);
  date xmas(25,12,0);        // ±εΩ≡α∙σφφα  ⌠ε≡∞α
                          // (xmas - ≡εµΣσ±≥Γε)
  date my_burthday;        // φσΣε∩≤±≥Φ∞ε, ε∩≤∙σφα ΦφΦ÷ΦαδΦτα÷Φ 

╫α±≥ε ß√Γασ≥ ⌡ε≡ε°ε εßσ±∩σ≈Φ≥ⁿ φσ±ΩεδⁿΩε ±∩ε±εßεΓ ΦφΦ÷ΦαδΦτα÷ΦΦ εß·σΩ≥α Ωδα±±α. ▌≥ε ∞εµφε ±Σσδα≥ⁿ, ταΣαΓ φσ±ΩεδⁿΩε Ωεφ±≥≡≤Ω≥ε≡εΓ. ═α∩≡Φ∞σ≡:
  class date {
      int month, day, year;
  public:
      // ...
      date(int, int, int);    // Σσφⁿ ∞σ± ÷ πεΣ
      date(char*);            // Σα≥α Γ ±≥≡εΩεΓε∞ ∩≡σΣ±≥αΓδσφΦΦ
      date(int);                // Σσφⁿ, ∞σ± ÷ Φ πεΣ ±σπεΣφ °φΦσ
      date();                    // Σα≥α ∩ε ≤∞εδ≈αφΦ■: ±σπεΣφ 
  };

╩εφ±≥≡≤Ω≥ε≡√ ∩εΣ≈Φφ ■≥±  ≥σ∞ µσ ∩≡αΓΦδα∞ ε≥φε±Φ≥σδⁿφε ≥Φ∩εΓ ∩α≡α∞σ≥≡εΓ, ≈≥ε Φ ∩σ≡σπ≡≤µσφφ√σ ⌠≤φΩ÷ΦΦ (
#4.6.7). ┼±δΦ Ωεφ±≥≡≤Ω≥ε≡√ ±≤∙σ±≥Γσφφε ≡ατδΦ≈α■≥±  ∩ε ≥Φ∩α∞ ±ΓεΦ⌡ ∩α≡α∞σ≥≡εΓ, ≥ε Ωε∞∩Φδ ≥ε≡ ∩≡Φ ΩαµΣε∞ Φ±∩εδⁿτεΓαφΦΦ ∞εµσ≥ Γ√ß≡α≥ⁿ ∩≡αΓΦδⁿφ√Θ:
  date today(4);
  date july4("╚■δⁿ 4, 1983");
  date guy("5 ═ε ");
  date now;                    // ΦφΦ÷ΦαδΦτΦ≡≤σ≥±  ∩ε ≤∞εδ≈αφΦ■

╟α∞σ≥ⁿ≥σ, ≈≥ε ⌠≤φΩ÷ΦΦ ≈δσφ√ ∞επ≤≥ ß√≥ⁿ ∩σ≡σπ≡≤µσφ√ ßστ  Γφεπε Φ±∩εδⁿτεΓαφΦ  Ωδ■≈σΓεπε ±δεΓα overload. ╧ε±ΩεδⁿΩ≤ ∩εδφ√Θ ±∩Φ±εΩ ⌠≤φΩ÷ΦΘ ≈δσφεΓ φα⌡εΣΦ≥±  Γ ε∩Φ±αφΦΦ Ωδα±±α Φ ΩαΩ ∩≡αΓΦδε Ωε≡ε≥ΩΦΘ, ≥ε φσ≥ φΦΩαΩεΘ ±σ≡ⁿστφεΘ ∩≡Φ≈Φφ√ ≥≡σßεΓα≥ⁿ Φ±∩εδⁿτεΓαφΦ  ±δεΓα overload Σδ  ∩≡σΣε≥Γ≡α∙σφΦ  ±δ≤≈αΘφεπε ∩εΓ≥ε≡φεπε Φ±∩εδⁿτεΓαφΦ  Φ∞σφΦ.
╨ατ∞φεµσφΦσ Ωεφ±≥≡≤Ω≥ε≡εΓ Γ ∩≡Φ∞σ≡σ ± date ≥Φ∩Φ≈φε. ╧≡Φ ≡ατ≡αßε≥Ωσ Ωδα±±α Γ±σπΣα σ±≥ⁿ ±εßδατφ εßσ±∩σ≈Φ≥ⁿ "Γ±σ", ∩ε±ΩεδⁿΩ≤ Ωαµσ≥±  ∩≡ε∙σ εßσ±∩σ≈Φ≥ⁿ ΩαΩεσ-φΦß≤Σⁿ ±≡σΣ±≥Γε ∩≡ε±≥ε φα ±δ≤≈αΘ, ≈≥ε εφε Ωε∞≤-≥ε ∩εφαΣεßΦ≥±  ΦδΦ ∩ε≥ε∞≤, ≈≥ε εφε Φτ ∙φε Γ√πδ ΣΦ≥, ≈σ∞ ≡σ°Φ≥ⁿ, ≈≥ε µσ φ≤µφε φα ±α∞ε∞ Σσδσ. ╧ε±δσΣφσσ ≥≡σß≤σ≥ ßεδⁿ°Φ⌡ ≡ατ∞√°δσφΦΘ, φε εß√≈φε ∩≡ΦΓεΣΦ≥ Ω ∩≡επ≡α∞∞α∞, Ωε≥ε≡√σ ∞σφⁿ°σ ∩ε ≡ατ∞σ≡≤ Φ ßεδσσ ∩εφ ≥φ√. ╬ΣΦφ Φτ ±∩ε±εßεΓ ±εΩ≡α≥Φ≥ⁿ ≈Φ±δε ≡εΣ±≥Γσφφ√⌡ ⌠≤φΩ÷ΦΘ - Φ±∩εδⁿτεΓα≥ⁿ ∩α≡α∞σ≥≡√ ∩ε ≤∞εδ≈αφΦ■. ┬ ±δ≤≈ασ date Σδ  ΩαµΣεπε ∩α≡α∞σ≥≡α ∞εµφε ταΣα≥ⁿ τφα≈σφΦσ ∩ε ≤∞εδ≈αφΦ■, Φφ≥σ≡∩≡σ≥Φ≡≤σ∞εσ ΩαΩ "∩ε ≤∞εδ≈αφΦ■ ∩≡ΦφΦ∞α≥ⁿ: today" (±σπεΣφ ).
  class date {
      int month, day, year;
  public:
      // ...
      date(int d =0, int m =0, int y =0);
      date(char*);            // Σα≥α Γ ±≥≡εΩεΓε∞ ∩≡σΣ±≥αΓδσφΦΦ
  };

  date::date(int d, int m, int y)
  {
      day = d ? d : today.day;
      month = m ? m : today.month;
      year = y ? y : today.year;
      // ∩≡εΓσ≡Ωα, ≈≥ε Σα≥α Σε∩≤±≥Φ∞α 
      // ...
  }

╩επΣα Φ±∩εδⁿτ≤σ≥±  τφα≈σφΦσ ∩α≡α∞σ≥≡α, ≤Ωατ√Γα■∙σσ "ß≡α≥ⁿ ∩ε ≤∞εδ≈αφΦ■", Γ√ß≡αφφεσ τφα≈σφΦσ Σεδµφε δσµα≥ⁿ Γφσ ∞φεµσ±≥Γα Γετ∞εµφ√⌡ τφα≈σφΦΘ ∩α≡α∞σ≥≡α. ─δ  Σφ  day Φ ∞σ± ÷α mounth  ±φε, ≈≥ε ²≥ε ≥αΩ, φε Σδ  πεΣα year Γ√ßε≡ φ≤δ  φσε≈σΓΦΣσφ. ╩ ±≈α±≥ⁿ■, Γ σΓ≡ε∩σΘ±Ωε∞ ΩαδσφΣα≡σ φσ≥ φ≤δσΓεπε πεΣα . ╤≡ατ≤ ∩ε±δσ 1 π. Σε φ.². (year==-1) ΦΣσ≥ 1 π. φ.². (year==1), φε Σδ  ≡σαδⁿφεΘ ∩≡επ≡α∞∞√ ²≥ε ∞εµσ≥ εΩατα≥ⁿ±  ±δΦ°Ωε∞ ≥εφΩε.
╬ß·σΩ≥ Ωδα±±α ßστ Ωεφ±≥≡≤Ω≥ε≡εΓ ∞εµφε ΦφΦ÷ΦαδΦτΦ≡εΓα≥ⁿ ∩≤≥σ∞ ∩≡Φ±ΓαΦΓαφΦ  σ∞≤ Σ≡≤πεπε εß·σΩ≥α ²≥επε Ωδα±±α. ▌≥ε ∞εµφε Σσδα≥ⁿ Φ ≥επΣα, ΩεπΣα Ωεφ±≥≡≤Ω≥ε≡√ ε∩Φ±αφ√. ═α∩≡Φ∞σ≡:
  date  d = today;    // ΦφΦ÷ΦαδΦτα÷Φ  ∩ε±≡σΣ±≥Γε∞ ∩≡Φ±ΓαΦΓαφΦ 

╧ε ±≤∙σ±≥Γ≤, Φ∞σσ≥±  Ωεφ±≥≡≤Ω≥ε≡ ∩ε ≤∞εδ≈αφΦ■, ε∩≡σΣσδσφφ√Θ ΩαΩ ∩εßΦ≥εΓα  Ωε∩Φ  εß·σΩ≥α ≥επε µσ Ωδα±±α. ┼±δΦ Σδ  Ωδα±±α X ≥αΩεΘ Ωεφ±≥≡≤Ω≥ε≡ ∩ε ≤∞εδ≈αφΦ■ φσµσδα≥σδσφ, σπε ∞εµφε ∩σ≡σε∩≡σΣσδΦ≥ⁿ Ωεφ±≥≡≤Ω≥ε≡ε∞ ± Φ∞σφσ∞ X(X&). ▌≥ε ß≤Σσ≥ εß±≤µΣα≥ⁿ±  Γ #6.6.

5.2.5 ╬≈Φ±≥Ωα

╬∩≡σΣσδ σ∞√Θ ∩εδⁿτεΓα≥σδσ∞ ≥Φ∩ ≈α∙σ Φ∞σσ≥, ≈σ∞ φσ Φ∞σσ≥, Ωεφ±≥≡≤Ω≥ε≡, Ωε≥ε≡√Θ εßσ±∩σ≈ΦΓασ≥ φαΣδσµα∙≤■ ΦφΦ÷ΦαδΦτα÷Φ■. ─δ  ∞φεπΦ⌡ ≥Φ∩εΓ ≥αΩµσ ≥≡σß≤σ≥±  εß≡α≥φεσ ΣσΘ±≥ΓΦσ, Σσ±≥≡≤Ω≥ε≡, ≈≥εß√ εßσ±∩σ≈Φ≥ⁿ ±εε≥Γσ≥±≥Γ≤■∙≤■ ε≈Φ±≥Ω≤ εß·σΩ≥εΓ ²≥επε ≥Φ∩α. ╚∞  Σσ±≥≡≤Ω≥ε≡α Σδ  Ωδα±±α X σ±≥ⁿ ~X() ("Σε∩εδφσφΦσ Ωεφ±≥≡≤Ω≥ε≡α"). ┬ ≈α±≥φε±≥Φ, ∞φεπΦσ ≥Φ∩√ Φ±∩εδⁿτ≤■≥ φσΩε≥ε≡√Θ εß·σ∞ ∩α∞ ≥Φ Φτ ±ΓεßεΣφεΘ ∩α∞ ≥Φ (±∞. #3.2.6), Ωε≥ε≡√Θ Γ√Σσδ σ≥±  Ωεφ±≥≡≤Ω≥ε≡ε∞ Φ ε±ΓεßεµΣασ≥±  Σσ±≥≡≤Ω≥ε≡ε∞. ┬ε≥, φα∩≡Φ∞σ≡, ≥≡αΣΦ÷Φεφφ√Θ ±≥σΩεΓ√Θ ≥Φ∩, Φτ Ωε≥ε≡επε Σδ  Ω≡α≥Ωε±≥Φ ∩εδφε±≥ⁿ■ Γ√ß≡ε°σφα εß≡αßε≥Ωα ε°ΦßεΩ:

  class char_stack {
      int size;
      char* top;
      char* s;
  public:
      char_stack(int sz) { top=s=new char[size=sz]; }
      ~char_stack()      { delete s; }    // Σσ±≥≡≤Ω≥ε≡
      void push(char c)  { *top++ = c; }
      char pop()         { return *--top;}
  }

╩επΣα char_stack Γ√⌡εΣΦ≥ Φτ εßδα±≥Φ ΓΦΣΦ∞ε±≥Φ, Γ√τ√Γασ≥±  Σσ±≥≡≤Ω≥ε≡:
  void f()
  {
      char_stack s1(100);
      char_stack s2(200);
      s1.push('a');
      s2.push(s1.pop());
      char ch = s2.pop();
      cout << chr(ch) << "\n";
  }

╩επΣα Γ√τ√Γασ≥±  f(), Ωεφ±≥≡≤Ω≥ε≡ char_stack Γ√τ√Γασ≥±  Σδ  s1, ≈≥εß√ Γ√ΣσδΦ≥ⁿ ΓσΩ≥ε≡ Φτ 100 ±Φ∞ΓεδεΓ, Φ Σδ  s2, ≈≥εß√ Γ√ΣσδΦ≥ⁿ ΓσΩ≥ε≡ Φτ 200 ±Φ∞ΓεδεΓ. ╧≡Φ ΓετΓ≡α≥σ Φτ f() ²≥Φ ΣΓα ΓσΩ≥ε≡α ß≤Σ≤≥ ε±ΓεßεµΣσφ√.

5.2.6 Inline

╧≡Φ ∩≡επ≡α∞∞Φ≡εΓαφΦΦ ± Φ±∩εδⁿτεΓαφΦσ∞ Ωδα±±εΓ ε≈σφⁿ ≈α±≥ε Φ±∩εδⁿτ≤σ≥±  ∞φεπε ∞αδσφⁿΩΦ⌡ ⌠≤φΩ÷ΦΘ. ╧ε ±≤≥Φ, ΓστΣσ, πΣσ Γ ∩≡επ≡α∞∞σ ≥≡αΣΦ÷ΦεφφεΘ ±≥≡≤Ω≥≤≡√ ±≥ε δε ß√ ∩≡ε±≥ε ΩαΩεσ-φΦß≤Σⁿ εß√≈φεσ Φ±∩εδⁿτεΓαφΦσ ±≥≡≤Ω≥≤≡√ Σαφφ√⌡, Σασ≥±  ⌠≤φΩ÷Φ . ╥ε, ≈≥ε ß√δε ±επδα°σφΦσ∞, ±≥αδε ±≥αφΣα≡≥ε∞, Ωε≥ε≡√Θ ≡α±∩ετφασ≥ Ωε∞∩Φδ ≥ε≡. ▌≥ε ∞εµσ≥ ±≥≡α°φε ∩εφΦτΦ≥ⁿ ²⌠⌠σΩ≥ΦΓφε±≥ⁿ, ∩ε≥ε∞≤ ≈≥ε ±≥εΦ∞ε±≥ⁿ Γ√τεΓα ⌠≤φΩ÷ΦΦ (⌡ε≥  Φ ΓεΓ±σ φσ Γ√±εΩα  ∩ε ±≡αΓφσφΦ■ ± Σ≡≤πΦ∞Φ  τ√Ωα∞Φ) Γ±σ ≡αΓφε φα∞φεπε Γ√°σ, ≈σ∞ ∩α≡α ±±√δεΩ ∩ε ∩α∞ ≥Φ, φσεß⌡εΣΦ∞α  Σδ  ≥σδα ⌠≤φΩ÷ΦΦ.
╫≥εß√ ±∩≡αΓΦ≥ⁿ±  ± ²≥εΘ ∩≡εßδσ∞εΘ, ß√δ ≡ατ≡αßε≥αφ α∩∩α≡α≥ inline- ⌠≤φΩ÷ΦΘ. ╘≤φΩ÷Φ  ≈δσφ, ε∩≡σΣσδσφφα  (α φσ ∩≡ε±≥ε ε∩Φ±αφφα ) Γ ε∩Φ±αφΦΦ Ωδα±±α, ±≈Φ≥ασ≥±  inline. ▌≥ε τφα≈Φ≥, φα∩≡Φ∞σ≡, ≈≥ε Γ ⌠≤φΩ÷Φ ⌡, Ωε≥ε≡√σ Φ±∩εδⁿτ≤■≥ ∩≡ΦΓσΣσφφ√σ Γ√°σ char_stack, φσ≥ φΦΩαΩΦ⌡ Γ√τεΓεΓ ⌠≤φΩ÷ΦΘ Ω≡ε∞σ ≥σ⌡, Ωε≥ε≡√σ Φ±∩εδⁿτ≤■≥±  Σδ  ≡σαδΦτα÷ΦΦ ε∩σ≡α÷ΦΘ Γ√ΓεΣα! ─≡≤πΦ∞Φ ±δεΓα∞Φ, φσ≥ φΦΩαΩΦ⌡ τα≥≡α≥ Γ≡σ∞σφΦ Γ√∩εδφσφΦ , Ωε≥ε≡√σ ±≥εΦ≥ ∩≡ΦφΦ∞α≥ⁿ Γε ΓφΦ∞αφΦσ ∩≡Φ ≡ατ≡αßε≥Ωσ Ωδα±±α. ╦■ßεσ, Σαµσ ±α∞εσ ∞αδσφⁿΩεσ ΣσΘ±≥ΓΦσ, ∞εµφε ταΣα≥ⁿ ²⌠⌠σΩ≥ΦΓφε. ▌≥ε ≤≥Γσ≡µΣσφΦσ ±φΦ∞ασ≥ α≡π≤∞σφ≥, Ωε≥ε≡√Θ ≈α∙σ Γ±σπε ∩≡ΦΓεΣ ≥ ≈α∙σ Γ±σπε Γ ∩εδⁿτ≤ ε≥Ω≡√≥√⌡ ≈δσφεΓ Σαφφ√⌡.
╘≤φΩ÷Φ■ ≈δσφ ∞εµφε ≥αΩµσ ε∩Φ±α≥ⁿ ΩαΩ inline Γφσ ε∩Φ±αφΦ  Ωδα±±α. ═α∩≡Φ∞σ≡:

  char char_stack {
      int size;
      char* top;
      char* s;
  public:
      char pop();
      // ...
  };

  inline char char_stack::pop()
  {
      return *--top;
  }

5.3 ╚φ≥σ≡⌠σΘ±√ Φ ╨σαδΦτα÷ΦΦ

5.3.1 └δⁿ≥σ≡φα≥ΦΓφ√σ ╨σαδΦτα÷ΦΦ
5.3.2 ╟αΩεφ≈σφφ√Θ ╩δα±±

╫≥ε ∩≡σΣ±≥αΓδ σ≥ ±εßεΘ ⌡ε≡ε°ΦΘ Ωδα±±? ═σ≈≥ε, Φ∞σ■∙σσ φσßεδⁿ°εσ Φ ⌡ε≡ε°ε ε∩≡σΣσδσφφεσ ∞φεµσ±≥Γε ΣσΘ±≥ΓΦΘ. ═σ≈≥ε, ≈≥ε ∞εµφε ≡α±±∞α≥≡ΦΓα≥ⁿ ΩαΩ "≈σ≡φ√Θ  ∙ΦΩ", Ωε≥ε≡√∞ ∞αφΦ∩≤δΦ≡≤■≥ ≥εδⁿΩε ∩ε±≡σΣ±≥Γε∞ ²≥επε ∞φεµσ±≥Γα ΣσΘ±≥ΓΦΘ. ═σ≈≥ε, ≈ⁿσ ⌠αΩ≥Φ≈σ±Ωεσ ∩≡σΣ±≥αΓδσφΦσ ∞εµφε δ■ß√∞ ∞√±δΦ∞√∞ ±∩ε±εßε∞ Φτ∞σφΦ≥ⁿ, φσ ∩εΓδΦ Γ φα ±∩ε±εß Φ±∩εδⁿτεΓαφΦ  ∞φεµσ±≥Γα ΣσΘ±≥ΓΦΘ. ═σ≈≥ε, ≈σπε ∞εµφε ⌡ε≥σ≥ⁿ Φ∞σ≥ⁿ ßεδⁿ°σ εΣφεπε.
─δ  Γ±σ⌡ ΓΦΣεΓ Ωεφ≥σΘφσ≡εΓ ±≤∙σ±≥Γ≤■≥ ε≈σΓΦΣφ√σ ∩≡Φ∞σ≡√: ≥αßδΦ÷√, ∞φεµσ±≥Γα, ±∩Φ±ΩΦ, ΓσΩ≥ε≡α, ±δεΓα≡Φ Φ ≥.Σ. ╥αΩεΘ Ωδα±± Φ∞σσ≥ ε∩σ≡α÷Φ■ "Γ±≥αΓΦ≥ⁿ", εß√≈φε εφ ≥αΩµσ Φ∞σσ≥ ε∩σ≡α÷ΦΦ Σδ  ∩≡εΓσ≡ΩΦ ≥επε, ß√δ δΦ Γ±≥αΓδσφ Σαφφ√Θ ²δσ∞σφ≥. ┬ φσ∞ ∞επ≤≥ ß√≥ⁿ ΣσΘ±≥ΓΦ  Σδ  ε±≤∙σ±≥ΓδσφΦ  ∩≡εΓσ≡ΩΦ Γ±σ⌡ ²δσ∞σφ≥εΓ Γ ε∩≡σΣσδσφφε∞ ∩ε≡ ΣΩσ, Φ Ω≡ε∞σ Γ±σπε ∩≡ε≈σπε, Γ φσ∞ ∞εµσ≥ Φ∞σ≥ⁿ±  ε∩σ≡α÷Φ  Σδ  ≤ΣαδσφΦ  ²δσ∞σφ≥α. ╬ß√≈φε Ωεφ≥σΘφσ≡φ√σ (≥ε σ±≥ⁿ, Γ∞σ∙α■∙Φσ) Ωδα±±√ Φ∞σ■≥ Ωεφ±≥≡≤Ω≥ε≡√ Φ Σσ±≥≡≤Ω≥ε≡√.
╤Ω≡√≥Φσ Σαφφ√⌡ Φ ∩≡εΣ≤∞αφφ√Θ Φφ≥σ≡⌠σΘ± ∞εµσ≥ Σα≥ⁿ Ωεφ÷σ∩÷Φ  ∞εΣ≤δ  (±∞. φα∩≡Φ∞σ≡
#4.4: ⌠αΘδ√ ΩαΩ ∞εΣ≤δΦ). ╩δα±±, εΣφαΩε,  Γδ σ≥±  ≥Φ∩ε∞. ╫≥εß√ Φ±∩εδⁿτεΓα≥ⁿ σπε, φσεß⌡εΣΦ∞ε ±ετΣα≥ⁿ εß·σΩ≥√ ²≥επε Ωδα±±α, Φ ≥αΩΦ⌡ εß·σΩ≥εΓ ∞εµφε ±ετΣαΓα≥ⁿ ±≥εδⁿΩε, ±ΩεδⁿΩε φ≤µφε. ╠εΣ≤δⁿ µσ ±α∞  Γδ σ≥±  εß·σΩ≥ε∞. ╫≥εß√ Φ±∩εδⁿτεΓα≥ⁿ σπε, σπε φαΣε ≥εδⁿΩε ΦφΦ÷ΦαδΦτΦ≡εΓα≥ⁿ, Φ ≥αΩΦ⌡ εß·σΩ≥εΓ ≡εΓφε εΣΦφ.

5.3.1 └δⁿ≥σ≡φα≥ΦΓφ√σ ╨σαδΦτα÷ΦΦ

╧εΩα ε∩Φ±αφΦσ ε≥Ω≡√≥εΘ ≈α±≥Φ Ωδα±±α Φ ε∩Φ±αφΦσ ⌠≤φΩ÷ΦΘ ≈δσφεΓ ε±≥α■≥±  φσΦτ∞σφφ√∞Φ, ≡σαδΦτα÷Φ■ Ωδα±±α ∞εµφε ∞εΣΦ⌠Φ÷Φ≡εΓα≥ⁿ φσ ΓδΦ   φα σσ ∩εδⁿτεΓα≥σδσΘ. ╩αΩ ∩≡Φ∞σ≡ ²≥επε ≡α±±∞ε≥≡Φ∞ ≥αßδΦ÷≤ Φ∞σφ, Ωε≥ε≡α  Φ±∩εδⁿτεΓαδα±ⁿ Γ φα±≥εδⁿφε∞ ΩαδⁿΩ≤δ ≥ε≡σ Γ ├δαΓσ 3. ▌≥ε ≥αßδΦ÷α Φ∞σφ:

  struct name {
      char* string;
      char* next;
      double value;
  };

┬ε≥ Γα≡Φαφ≥ Ωδα±±α table:
  // ⌠αΘδ table.h

  class table {
      name* tbl;
  public:
      table() { tbl = 0; }

  name* look(char*, int = 0);
  name* insert(char* s) { return look(s,1); }
  };

▌≥α ≥αßδΦ÷α ε≥δΦ≈ασ≥±  ε≥ ≥εΘ, Ωε≥ε≡α  ε∩≡σΣσδσφα Γ ├δαΓσ 3 ≥σ∞, ≈≥ε ²≥ε φα±≥ε ∙ΦΘ ≥Φ∩. ╠εµφε ε∩Φ±α≥ⁿ ßεδσσ ≈σ∞ εΣφ≤ table, ∞εµφε Φ∞σ≥ⁿ ≤Ωατα≥σδⁿ φα table Φ ≥.Σ. ═α∩≡Φ∞σ≡:
  #include "table.h"

  table globals;
  table keywords;
  table* locals;

  main() {
      locals = new table;
      // ...
  }

┬ε≥ ≡σαδΦτα÷Φ  table::look(), Ωε≥ε≡α  Φ±∩εδⁿτ≤σ≥ δΦφσΘφ√Θ ∩εΦ±Ω Γ ±Γ ταφφε∞ ±∩Φ±Ωσ Φ∞σφ name Γ ≥αßδΦ÷σ:
  #include

  name* table::look(char* p, int ins)
  {
      for (name* n = tbl; n; n=n->next)
          if (strcmp(p,n->string) == 0) return n;

      if (ins == 0) error("Φ∞  φσ φαΘΣσφε");

      name* nn = new name;
      nn->string = new char[strlen(p)+1];
      strcpy(nn->string,p);
      nn->value = 1;
      nn->next = tbl;
      tbl = nn;
      return nn;
  }

╥σ∩σ≡ⁿ ≡α±±∞ε≥≡Φ∞ Ωδα±± table, ≤±εΓσ≡°σφ±≥ΓεΓαφφ√Θ ≥αΩΦ∞ εß≡ατε∞, ≈≥εß√ Φ±∩εδⁿτεΓα≥ⁿ ⌡²°Φ≡εΓαφφ√Θ ∩≡ε±∞ε≥≡, ΩαΩ ²≥ε Σσδαδε±ⁿ Γ ∩≡Φ∞σ≡σ ± φα±≥εδⁿφ√∞ ΩαδⁿΩ≤δ ≥ε≡ε∞. ╤Σσδα≥ⁿ ²≥ε ≥≡≤Σφσσ Φτ-τα ≥επε επ≡αφΦ≈σφΦ , ≈≥ε ≤µσ φα∩Φ±αφφ√σ ∩≡επ≡α∞∞√, Γ Ωε≥ε≡√⌡ Φ±∩εδⁿτεΓαδα±ⁿ ≥εδⁿΩε ≈≥ε ε∩≡σΣσδσφφα  Γσ≡±Φ  Ωδα±±α table, Σεδµφ√ ε±≥αΓα≥ⁿ±  Γσ≡φ√∞Φ ßστ Φτ∞σφσφΦΘ:
  class table {
      name** tbl;
      int size;
  public:
      table(int sz = 15);
      ~table();

  name* look(char*, int = 0);
  name* insert(char* s) { return look(s,1); }
  };

┬ ±≥≡≤Ω≥≤≡≤ Σαφφ√⌡ Φ Ωεφ±≥≡≤Ω≥ε≡ Γφσ±σφ√ Φτ∞σφσφΦ , ε≥≡αµα■∙Φσ φσεß⌡εΣΦ∞ε±≥ⁿ ≥επε, ≈≥ε ∩≡Φ Φ±∩εδⁿτεΓαφΦΦ ⌡²°Φ≡εΓαφΦ  ≥αßδΦ÷α Σεδµφα Φ∞σ≥ⁿ ε∩≡σΣσδσφφ√Θ ≡ατ∞σ≡. ╟αΣαφΦσ Ωεφ±≥≡≤Ω≥ε≡α ± ∩α≡α∞σ≥≡ε∞ ∩ε ≤∞εδ≈αφΦ■ εßσ±∩σ≈ΦΓασ≥, ≈≥ε ±≥α≡α  ∩≡επ≡α∞∞α, Γ Ωε≥ε≡εΘ φσ ≤Ωατ√Γαδ±  ≡ατ∞σ≡ ≥αßδΦ÷√, ε±≥αφσ≥±  ∩≡αΓΦδⁿφεΘ. ╧α≡α∞σ≥≡√ ∩ε ≤∞εδ≈αφΦ■ ε≈σφⁿ ∩εδστφ√ Γ ±Φ≥≤α÷ΦΦ, ΩεπΣα φ≤µφε Φτ∞σφΦ≥ⁿ Ωδα±± φσ ∩εΓδΦ Γ φα ±≥α≡√σ ∩≡επ≡α∞∞√. ╥σ∩σ≡ⁿ Ωεφ±≥≡≤Ω≥ε≡ Φ Σσ±≥≡≤Ω≥ε≡ ±ετΣα■≥ Φ ≤φΦ≈≥εµα■≥ ⌡²°-≥αßδΦ÷√:
  table::table(int sz)
  {
      if (sz < 0) error("ε≥≡Φ÷α≥σδⁿφ√Θ ≡ατ∞σ≡ ≥αßδΦ÷√");
      tbl = new name*[size=sz];
      for (int i = 0; inext) {
              delete n->string;
              delete n;
          }
          delete tbl;
  }

╬∩Φ±αΓ Σσ±≥≡≤Ω≥ε≡ Σδ  Ωδα±±α name ∞εµφε ∩εδ≤≈Φ≥ⁿ ßεδσσ ∩≡ε±≥εΘ Φ  ±φ√Θ Γα≡Φαφ≥ table::~table(). ╘≤φΩ÷Φ  ∩≡ε±∞ε≥≡α ∩≡αΩ≥Φ≈σ±ΩΦ ΦΣσφ≥Φ≈φα ≥εΘ, Ωε≥ε≡α  Φ±∩εδⁿτεΓαδα±ⁿ Γ ∩≡Φ∞σ≡σ φα±≥εδⁿφεπε ΩαδⁿΩ≤δ ≥ε≡α (#3.1.3):
  #include

  name* table::look(char* p, int ins)
  {
      int ii = 0;
      char* pp = p;
      while (*pp) ii = ii<<1 ^ *pp++;
      if (ii < 0) ii = -ii;
      ii %= size;

      for (name* n=tbl[ii]; n; n=n->next)
          if (strcmp(p,n->string) == 0) return n;

      if (ins == 0) error("Φ∞  φσ φαΘΣσφε");

      name* nn = new name;
      nn->string = new char[strlen(p)+1];
      strcpy(nn->string,p);
      nn->value = 1;
      nn->next = tbl[ii];
      tbl[ii] = nn;
      return nn;

  }

╬≈σΓΦΣφε, ≈≥ε ⌠≤φΩ÷ΦΦ ≈δσφ√ Ωδα±±α Σεδµφ√ ταφεΓε Ωε∞∩ΦδΦ≡εΓα≥ⁿ±  Γ±σπΣα, ΩεπΣα Γφε±Φ≥±  ΩαΩεσ-δΦßε Φτ∞σφσφΦσ Γ ε∩Φ±αφΦσ Ωδα±±α. ┬ ΦΣσαδσ ≥αΩεσ Φτ∞σφσφΦσ φΦΩαΩ φσ Σεδµφε ε≥≡αµα≥ⁿ±  φα ∩εδⁿτεΓα≥σδ ⌡ Ωδα±±α. ╩ ±εµαδσφΦ■, ²≥ε φσ ≥αΩ. ─δ  ≡ατ∞σ∙σφΦ  ∩σ≡σ∞σφφεΘ Ωδα±±εΓεπε ≥Φ∩α Ωε∞∩Φδ ≥ε≡ Σεδµσφ τφα≥ⁿ ≡ατ∞σ≡ εß·σΩ≥α Ωδα±±α. ┼±δΦ ≡ατ∞σ≡ ²≥Φ⌡ εß·σΩ≥εΓ ∞σφ σ≥± , ≥ε ⌠αΘδ√, Γ Ωε≥ε≡√⌡ Ωδα±± Φ±∩εδⁿτ≤σ≥± , φ≤µφε Ωε∞∩ΦδΦ≡εΓα≥ⁿ ταφεΓε. ╠εµφε φα∩Φ±α≥ⁿ ≥αΩ≤■ ∩≡επ≡α∞∞≤ (Φ εφα ≤µσ φα∩Φ±αφα), Ωε≥ε≡α  ε∩≡σΣσδ σ≥ ∞φεµσ±≥Γε (∞ΦφΦ∞αδⁿφεσ) ⌠αΘδεΓ, Ωε≥ε≡εσ φσεß⌡εΣΦ∞ε Ωε∞∩ΦδΦ≡εΓα≥ⁿ ταφεΓε ∩ε±δσ Φτ∞σφσφΦ  ε∩Φ±αφΦ  Ωδα±±α, φε ∩εΩα ≈≥ε °Φ≡εΩεπε ≡α±∩≡ε±≥≡αφσφΦ  εφα φσ ∩εδ≤≈Φδα.
╧ε≈σ∞≤, ∞εµσ≥σ Γ√ ±∩≡ε±Φ≥ⁿ, C++ ≡ατ≡αßε≥αφ ≥αΩ, ≈≥ε ∩ε±δσ Φτ∞σφσφΦ  ταΩ≡√≥εΘ ≈α±≥Φ φσεß⌡εΣΦ∞α φεΓα  Ωε∞∩Φδ ÷Φ  ∩εδⁿτεΓα≥σδσΘ Ωδα±±α? ╚ ΣσΘ±≥ΓΦ≥σδⁿφε, ∩ε≈σ∞≤ Γεεß∙σ ταΩ≡√≥α  ≈α±≥ⁿ Σεδµφα ß√≥ⁿ ∩≡σΣ±≥αΓδσφα Γ ε∩Φ±αφΦΦ Ωδα±±α? ─≡≤πΦ∞Φ ±δεΓα∞Φ, ≡ατ ∩εδⁿτεΓα≥σδ ∞ Ωδα±±α φσ ≡ατ≡σ°ασ≥±  εß≡α∙α≥ⁿ±  Ω ταΩ≡√≥√∞ ≈δσφα∞, ∩ε≈σ∞≤ Φ⌡ ε∩Φ±αφΦ  Σεδµφ√ ∩≡ΦΓεΣΦ≥ⁿ±  Γ ταπεδεΓε≈φ√⌡ ⌠αΘδα⌡, Ωε≥ε≡√σ, ΩαΩ ∩≡σΣ∩εδαπασ≥± , ∩εδⁿτεΓα≥σδⁿ ≈Φ≥ασ≥? ╬≥Γσ≥ - ²⌠⌠σΩ≥ΦΓφε±≥ⁿ. ┬ε ∞φεπΦ⌡ ±Φ±≥σ∞α⌡ Φ ∩≡ε÷σ±± Ωε∞∩Φδ ÷ΦΦ, Φ ∩ε±δσΣεΓα≥σδⁿφε±≥ⁿ ε∩σ≡α÷ΦΘ, ≡σαδΦτ≤■∙Φ⌡ Γ√τεΓ ⌠≤φΩ÷ΦΦ, ∩≡ε∙σ, ΩεπΣα ≡ατ∞σ≡ αΓ≥ε∞α≥Φ≈σ±ΩΦ⌡ εß·σΩ≥εΓ (εß·σΩ≥εΓ Γ ±≥σΩσ) ΦτΓσ±≥σφ Γε Γ≡σ∞  Ωε∞∩Φδ ÷ΦΦ.
▌≥εΘ ±δεµφε±≥Φ ∞εµφε Φτßσµα≥ⁿ, ∩≡σΣ±≥αΓΦΓ ΩαµΣ√Θ εß·σΩ≥ Ωδα±±α ΩαΩ ≤Ωατα≥σδⁿ φα "φα±≥ε ∙ΦΘ" εß·σΩ≥. ╥αΩ ΩαΩ Γ±σ ²≥Φ ≤Ωατα≥σδΦ ß≤Σ≤≥ Φ∞σ≥ⁿ εΣΦφαΩεΓ√Θ ≡ατ∞σ≡, α ≡ατ∞σ∙σφΦσ "φα±≥ε ∙Φ⌡" εß·σΩ≥εΓ ∞εµφε ε∩≡σΣσδΦ≥ⁿ Γ ⌠αΘδσ, πΣσ Σε±≥≤∩φα ταΩ≡√≥α  ≈α±≥ⁿ, ≥ε ²≥ε ∞εµσ≥ ≡σ°Φ≥ⁿ ∩≡εßδσ∞≤. ╬ΣφαΩε ≡σ°σφΦσ ∩εΣ≡ατ≤∞σΓασ≥ Σε∩εδφΦ≥σδⁿφ√σ ±±√δΩΦ ∩ε ∩α∞ ≥Φ ∩≡Φ εß≡α∙σφΦΦ Ω ≈δσφα∞ Ωδα±±α, α ≥αΩµσ, ≈≥ε σ∙σ ⌡≤µσ, ΩαµΣ√Θ Γ√τεΓ ⌠≤φΩ÷ΦΦ ± αΓ≥ε∞α≥Φ≈σ±ΩΦ∞ εß·σΩ≥ε∞ Ωδα±±α ΓΩδ■≈ασ≥ ∩ε ∞σφⁿ°σΘ ∞σ≡σ εΣΦφ Γ√τεΓ ∩≡επ≡α∞∞ Γ√ΣσδσφΦ  Φ ε±ΓεßεµΣσφΦ  ±ΓεßεΣφεΘ ∩α∞ ≥Φ. ▌≥ε ±Σσδαδε ß√ ≥αΩµσ φσΓετ∞εµφ√∞ ≡σαδΦτα÷Φ■ inline-⌠≤φΩ÷ΦΘ ≈δσφεΓ, Ωε≥ε≡√σ εß≡α∙α■≥±  Ω Σαφφ√∞ ταΩ≡√≥εΘ ≈α±≥Φ. ┴εδσσ ≥επε, ≥αΩεσ Φτ∞σφσφΦσ ±Σσδασ≥ φσΓετ∞εµφ√∞ ±εΓ∞σ±≥φ≤■ Ωε∞∩εφεΓΩ≤ C Φ C++ ∩≡επ≡α∞∞ (∩ε±ΩεδⁿΩ≤ C Ωε∞∩Φδ ≥ε≡ εß≡αßα≥√Γασ≥ struct φσ ≥αΩ, ΩαΩ ²≥ε ß≤Σσ≥ Σσδα≥ⁿ C++ Ωε∞∩Φδ ≥ε≡). ─δ  C++ ²≥ε ß√δε ±ε≈≥σφε φσ∩≡Φσ∞δσ∞√∞.

5.3.2 ╟αΩεφ≈σφφ√Θ ╩δα±±

╧≡επ≡α∞∞Φ≡εΓαφΦσ ßστ ±Ω≡√≥Φ  Σαφφ√⌡ (± ∩≡Φ∞σφσφΦσ∞ ±≥≡≤Ω≥≤≡) ≥≡σß≤σ≥ ∞σφⁿ°σΘ ∩≡εΣ≤∞αφφε±≥Φ, ≈σ∞ ∩≡επ≡α∞∞Φ≡εΓαφΦσ ±ε ±Ω≡√≥Φσ∞ Σαφφ√⌡ (± Φ±∩εδⁿτεΓαφΦσ∞ Ωδα±±εΓ). ╤≥≡≤Ω≥≤≡≤ ∞εµφε ε∩≡σΣσδΦ≥ⁿ φσ ±δΦ°Ωε∞ ταΣ≤∞√Γα ±ⁿ ε ≥ε∞, ΩαΩ σσ ∩≡σΣ∩εδαπασ≥±  Φ±∩εδⁿτεΓα≥ⁿ. └ ΩεπΣα ε∩≡σΣσδ σ≥±  Ωδα±±, Γ±σ ΓφΦ∞αφΦσ ±ε±≡σΣε≥α≈ΦΓασ≥±  φα εßσ±∩σ≈σφΦΦ φεΓεπε ≥Φ∩α ∩εδφ√∞ ∞φεµσ±≥Γε∞ ε∩σ≡α÷ΦΘ; ²≥ε Γαµφεσ ±∞σ∙σφΦσ αΩ÷σφ≥α. ┬≡σ∞ , ∩ε≥≡α≈σφφεσ φα ≡ατ≡αßε≥Ω≤ φεΓεπε ≥Φ∩α, εß√≈φε ∞φεπεΩ≡α≥φε εΩ≤∩ασ≥±  ∩≡Φ ≡ατ≡αßε≥Ωσ Φ ≥σ±≥Φ≡εΓαφΦΦ ∩≡επ≡α∞∞√.
┬ε≥ ∩≡Φ∞σ≡ ταΩεφ≈σφφεπε ≥Φ∩α intset, Ωε≥ε≡√Θ ≡σαδΦτ≤σ≥ ∩εφ ≥Φσ "∞φεµσ±≥Γε ÷σδ√⌡":

  class intset {
      int cursize, maxsize;
      int *x;
  public:
      intset(int m, int n);    // ±α∞εσ ßεδⁿ°σσ, m int'εΓ Γ 1..n
      ~intset();

      int member(int t);       //  Γδ σ≥±  δΦ t ²δσ∞σφ≥ε∞?
      void insert(int t);      // ΣεßαΓΦ≥ⁿ "t" Γ ∞φεµσ±≥Γε

      void iterate(int& i)     { i = 0; }
      int ok(int& i)           { return i

  void error(char* s)
  {
      cerr << "set: " << s << "\n";
      exit(1);
  }

╩δα±± intset Φ±∩εδⁿτ≤σ≥±  Γ main(), Ωε≥ε≡α  ∩≡σΣ∩εδαπασ≥ ΣΓα ÷σδ√⌡ ∩α≡α∞σ≥≡α. ╧σ≡Γ√Θ ∩α≡α∞σ≥≡ ταΣασ≥ ≈Φ±δε ±δ≤≈αΘφ√⌡ ≈Φ±σδ, Ωε≥ε≡√σ φ≤µφε ±πσφσ≡Φ≡εΓα≥ⁿ. ┬≥ε≡εΘ ∩α≡α∞σ≥≡ ≤Ωατ√Γασ≥ ΣΦα∩ατεφ, Γ Ωε≥ε≡ε∞ Σεδµφ√ δσµα≥ⁿ ±δ≤≈αΘφ√σ ÷σδ√σ:
  main(int argc, char* argv[])
  {
      if (argc != 3) error("εµΦΣασ≥±  ΣΓα ∩α≡α∞σ≥≡α");
      int count = 0;
      int m = atoi(argv[1]);        // ≈Φ±δε ²δσ∞σφ≥εΓ ∞φεµσ±≥Γα
      int n = atoi(argv[2]);        // Γ ΣΦα∩ατεφσ 1..n
      intset s(m,n);

      while (count maxsize) error("±δΦ∙Ωε∞ ∞φεπε ²δσ∞σφ≥εΓ");
      int i = cursize-1;
      x[i] = t;

      while (i>0 && x[i-1]>x[i]) {
          int t = x[i];                // ∩σ≡σ±≥αΓΦ≥ⁿ x[i] Φ [i-1]
          x[i] = x[i-1];
          x[i-1] = t;
          i--;
      }
  }

─δ  φα⌡εµΣσφΦ  ≈δσφεΓ Φ±∩εδⁿτ≤σ≥±  ∩≡ε±≥ε ΣΓεΦ≈φ√Θ ∩εΦ±Ω:
  int intset::member(int t)        // ΣΓεΦ≈φ√Θ ∩εΦ±Ω
  {
      int l = 0;
      int u = cursize-1;

      while (l <= u) {
          int m = (l+u)/2;
          if (t < x[m])
              u = m-1;
          else if (t > x[m])
              l = m+1;
          else
              return 1;            // φαΘΣσφε
      }
      return 0;                    // φσ φαΘΣσφε
  }

╚, φαΩεφσ÷, φα∞ φ≤µφε εßσ±∩σ≈Φ≥ⁿ ∞φεµσ±≥Γε ε∩σ≡α÷ΦΘ, ≈≥εß√ ∩εδⁿτεΓα≥σδⁿ ∞επ ε±≤∙σ±≥Γδ ≥ⁿ ÷ΦΩδ ∩ε ∞φεµσ±≥Γ≤ Γ φσΩε≥ε≡ε∞ ∩ε≡ ΣΩσ, ∩ε±ΩεδⁿΩ≤ ∩≡σΣ±≥αΓδσφΦσ intset ε≥ ∩εδⁿτεΓα≥σδ  ±Ω≡√≥ε. ╠φεµσ±≥Γε Γφ≤≥≡σφφσΘ ≤∩ε≡ Σε≈σφφε±≥Φ φσ Φ∞σσ≥, ∩ε²≥ε∞≤ ∞√ φσ ∞εµσ∞ ∩≡ε±≥ε Σα≥ⁿ Γετ∞εµφε±≥ⁿ εß≡α∙α≥ⁿ±  Ω ΓσΩ≥ε≡≤ (ταΓ≥≡α  , φαΓσ≡φεσ, ≡σαδΦτ≤■ intset ∩ε-Σ≡≤πε∞≤, Γ ΓΦΣσ ±Γ ταφφεπε ±∩Φ±Ωα).
─ασ≥±  ≥≡Φ ⌠≤φΩ÷ΦΦ: iterate() Σδ  ΦφΦ÷ΦαδΦτα÷ΦΦ Φ≥σ≡α÷ΦΦ, ok() Σδ  ∩≡εΓσ≡ΩΦ, σ±≥ⁿ δΦ ±δσΣ≤■∙ΦΘ ²δσ∞σφ≥, Φ next() Σδ  ≥επε, ≈≥εß√ Γτ ≥ⁿ ±δσΣ≤■∙ΦΘ ²δσ∞σφ≥:
  class intset {
      // ...
      void iterate(int& i)        { i = 0; }
      int ok(int& i)              { return iiterate(var);
      while (set->ok(var)) cout << set->next(var) << "\n";
  }

─≡≤πεΘ ±∩ε±εß ταΣα≥ⁿ Φ≥σ≡α≥ε≡ ∩≡ΦΓεΣΦ≥±  Γ
#6.8.

[═αταΣ] [╤εΣσ≡µαφΦσ] [┬∩σ≡σΣ]

Copyright © CIT