рдЦреБрд▓рд╛-рдмрдВрдж рд╕рд┐рджреНрдзрд╛рдВрдд

рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░! рдпрд╣рд╛рдВ рдУрдкрди-рдХреНрд▓реЛрдЬреНрдб рдкреНрд░рд┐рдВрд╕рд┐рдкрд▓ рдХреЗ рд░реЙрдмрд░реНрдЯ рдорд╛рд░реНрдЯрд┐рди рдХреЗ рдПрдХ рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд╣реИ, рдЬрд┐рд╕реЗ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЬрдирд╡рд░реА 1996 рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдерд╛ред рд▓реЗрдЦ, рдЗрд╕реЗ рд╣рд▓реНрдХреЗ рдврдВрдЧ рд╕реЗ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдирд╡реАрдирддрдо рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди RuNet рдореЗрдВ, SOLID рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдВрдХрд▓ рдмреЙрдм рдХреЗ рд▓реЗрдЦ рдХреЗрд╡рд▓ рдХрд╛рдЯ-рдЫрд╛рдБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдПрдХ рдкреВрд░реНрдг рдЕрдиреБрд╡рд╛рдж рдЕрддрд┐рд╢реНрдпреЛрдХреНрддрд┐рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реЛрдЧрд╛ред



рдореИрдВрдиреЗ рдкрддреНрд░ рдУ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЪреВрдВрдХрд┐ рдЦреБрд▓реЗрдкрди-рдмрдВрдж рд╣реЛрдиреЗ рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХреЗрдВрджреНрд░реАрдп рд╣реИред рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реВрдХреНрд╖реНрдорддрд╛рдПрдВ рд╣реИрдВ рдЬреЛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВ:


  • рдХреЛрдИ рднреА рдХрд╛рд░реНрдпрдХреНрд░рдо 100% "рдмрдВрдж" рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
  • рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (OOP) рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреА рднреМрддрд┐рдХ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрддреА рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "рдЖрджреЗрд╢" рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ред

рдпрд╣ C ++ рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдЗрдВрдЬреАрдирд┐рдпрд░ рдиреЛрдЯреНрд╕ рдХреЙрд▓рдо рдХрд╛ рдкрд╣рд▓рд╛ рд▓реЗрдЦ рд╣реИред рдЗрд╕ рдХреЙрд▓рдо рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рд▓реЗрдЦ C ++ рдФрд░ OOP рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реА рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХреЛ рдЫреВрдПрдВрдЧреЗред рдореИрдВ рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рдХреЛ рдЕрднреНрдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХреЛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдФрд░ рдЙрдкрдпреЛрдЧреА рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред рдЗрди рд▓реЗрдЦреЛрдВ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП рдореИрдВ рдмреБрдЪ рдХреЗ рдЕрдВрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдБрдЧрд╛ред


рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХрдИ рд╣реЗрдпреВрд░рд┐рд╕реНрдЯрд┐рдХреНрд╕ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "рд╕рднреА рд╕рджрд╕реНрдп рдЪрд░ рдирд┐рдЬреА рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП", рдпрд╛ "рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рд╕реЗ рдмрдЪрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП", рдпрд╛ "рд░рдирдЯрд╛рдЗрдо рдкрд░ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдЦрддрд░рдирд╛рдХ рд╣реИ"ред рдРрд╕реЗ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░рд┐рдпреЛрдВ рдХрд╛ рдХреНрдпрд╛ рдХрд╛рд░рдг рд╣реИ? рд╡реЗ рд╕рдЪ рдХреНрдпреЛрдВ рд╣реИрдВ? рдХреНрдпрд╛ рд╡реЗ рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╣реЛрддреЗ рд╣реИрдВ? рдпрд╣ рд╕реНрддрдВрдн рдЗрди рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░рд┐рдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдбрд┐рдЬрд╛рдЗрди рд╕рд┐рджреНрдзрд╛рдВрдд рдХреА рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИ - рдЦреБрд▓реЗрдкрди-рдмрдВрдж рд╣реЛрдиреЗ рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрддред
рдЗрд╡рд░ рдЬреИрдХрдмрд╕рди рдиреЗ рдХрд╣рд╛: тАЬрдЬреАрд╡рди рдЪрдХреНрд░ рдХреЗ рджреМрд░рд╛рди рд╕рднреА рдкреНрд░рдгрд╛рд▓рд┐рдпрд╛рдБ рдмрджрд▓ рдЬрд╛рддреА рд╣реИрдВред рдпрд╣ рдЙрд╕ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдкреИрджрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИред тАЭ рд╣рдо рдПрдХ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдХреИрд╕реЗ рдбрд┐рдЬрд╛рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдЪреЗрд╣рд░реЗ рдкрд░ рд╕реНрдерд┐рд░ рд╣реЛ рдФрд░ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реЛ? рдмрд░реНрдЯреНрд░реЗрдВрдб рдореЗрдпрд░ рдиреЗ рд╣рдореЗрдВ 1988 рдореЗрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдпрд╛, рдЬрдм рдЦреБрд▓реЗрдкрди-рдирд┐рдХрдЯрддрд╛ рдХреЗ рдкреНрд░рд╕рд┐рджреНрдз рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:


рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рдВрд╕реНрдерд╛рдУрдВ (рдХрдХреНрд╖рд╛рдПрдВ, рдореЙрдбреНрдпреВрд▓, рдлрд╝рдВрдХреНрд╢рди, рдЖрджрд┐) рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдмрдВрдж рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред


рдпрджрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди рдирд┐рд░реНрднрд░ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдПрдХ рдЭрд░рдирд╛ рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ "рдЦрд░рд╛рдм" рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рдЕрд╡рд╛рдВрдЫрдиреАрдп рд╕рдВрдХреЗрдд рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред


рдХрд╛рд░реНрдпрдХреНрд░рдо рдирд╛рдЬреБрдХ, рдЕрдирдореНрдп, рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдФрд░ рдЕрдкреНрд░рдпреБрдХреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЦреБрд▓реЗрдкрди-рдШрдирд┐рд╖реНрдарддрд╛ рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рддрд░реАрдХреЗ рд╕реЗ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред рд╡рд╣ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдРрд╕реЗ рдореЙрдбреНрдпреВрд▓реЛрдВ рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬреЛ рдХрднреА рдирд╣реАрдВ рдмрджрд▓рддреЗ рд╣реИрдВ ред рдЬрдм рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рдмрджрд▓ рдЬрд╛рддреА рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдкреБрд░рд╛рдиреЗ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рд░реНрдпрд░рдд рдХреЛрдб рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдирдП рдХреЛрдб рдЬреЛрдбрд╝рдХрд░ рдРрд╕реЗ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред


рд╡рд┐рд╡рд░рдг


рдЦреБрд▓реЗрдкрди-рдирд┐рдХрдЯрддрд╛ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдореЙрдбреНрдпреВрд▓ рдХреА рджреЛ рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ:


  1. рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд▓рд┐рдП рдЦреЛрд▓реЗрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдмрджрд▓рддреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдпрд╛ рдирдП рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рдЬрд░реВрд░рддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдирдпрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
  2. рдмрджрд▓рд╛рд╡ рдХреЗ рд▓рд┐рдП рдмрдВрджред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдЕрдЫреВрдд рд╣реИред рдХрд┐рд╕реА рдХреЛ рднреА рдЗрд╕рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рдирд╣реАрдВ рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпреЗ рджреЛрдиреЛрдВ рд╕рдВрдХреЗрдд рдПрдХ рд╕рд╛рде рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдорд╛рдирдХ рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЙрд╕рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдпрд╛ рдЬрд╛рдПред рдПрдХ рдореЙрдбреНрдпреВрд▓ рдЬрд┐рд╕реЗ рдмрджрд▓рд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЖрдорддреМрд░ рдкрд░ рдирд┐рд╢реНрдЪрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЛрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрди рджреЛ рд╡рд┐рдкрд░реАрдд рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?


рд╕рдорд╛рдзрд╛рди рдХреА рдХреБрдВрдЬреА рдЕрдореВрд░реНрддрддрд╛ рд╣реИред


C ++ рдореЗрдВ, рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдирд┐рд╢реНрдЪрд┐рдд рдЕрдореВрд░реНрдд рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдЬреЛ рд╕рдВрднрд╡ рд╡реНрдпрд╡рд╣рд╛рд░реЛрдВ рдХреЗ рдЕрд╕реАрдорд┐рдд рд╕реЗрдЯ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░ рд╕рдХрддрд╛ рд╣реИред


рд╕рд╛рд░ рдЕрдореВрд░реНрдд рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рд╣реИрдВ, рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдПрдХ рдЕрд╕реАрдорд┐рдд рд╕реЗрдЯ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рд╡рд░реНрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдПрдХ рдореЙрдбреНрдпреВрд▓ рдЕрдореВрд░реНрддрддрд╛ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдореЙрдбреНрдпреВрд▓ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдмрдВрдж рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЕрдореВрд░реНрддрддрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдореВрд░реНрдд рдХреЗ рдирдП рд╡рдВрд╢рдЬ рдмрдирд╛рдХрд░ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЖрд░реЗрдЦ рдореЗрдВ рдПрдХ рд╕рд░рд▓ рдбрд┐рдЬрд╛рдЗрди рд╡рд┐рдХрд▓реНрдк рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдЦреБрд▓реЗрдкрди-рдирд┐рдХрдЯрддрд╛ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рджреЛрдиреЛрдВ Client , Client рдФрд░ Server , рдЕрдореВрд░реНрдд рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕рдореЗрдВ рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ рдХрд┐ Server рдХреНрд▓рд╛рд╕ рдХреЗ рд╕рджрд╕реНрдп рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╡рд░реНрдЪреБрдЕрд▓ рд╣реИрдВред Client рд╡рд░реНрдЧ Server рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ Client рдХреНрд▓рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ рдЕрд▓рдЧ рд╕рд░реНрд╡рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗ, рддреЛ рд╣рдореЗрдВ рдирдП рд╕рд░реНрд╡рд░ рдХреНрд▓рд╛рд╕ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Client рдХреНрд▓рд╛рд╕ рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред


рдЫрд╡рд┐
рдмрдВрдж рдЧреНрд░рд╛рд╣рдХ


рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрд░реЗрдЦ рд╕рдВрдмрдВрдзрд┐рдд рдбрд┐рдЬрд╛рдЗрди рд╡рд┐рдХрд▓реНрдк рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЦреБрд▓реЗрдкрди-рдирд┐рдХрдЯрддрд╛ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, AbstractServer рд╡рд░реНрдЧ рдПрдХ рд╕рд╛рд░ рд╡рд░реНрдЧ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рднреА рд╕рджрд╕реНрдп рдХрд╛рд░реНрдп рдЖрднрд╛рд╕реА рд╣реИрдВред Client рд╡рд░реНрдЧ рдЕрдореВрд░реНрддрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, Client рд╡рд░реНрдЧ рдХреА рдСрдмреНрдЬреЗрдХреНрдЯ Server рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рд╡рд░реНрдЧ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдпрджрд┐ рд╣рдо Client рдХреНрд▓рд╛рд╕ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдПрдХ рдЕрд▓рдЧ рд╕рд░реНрд╡рд░ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо AbstractServer рдХреНрд▓рд╛рд╕ рдХреЗ рдПрдХ рдирдП рд╡рдВрд╢рдЬ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрдВрдЧреЗред Client рд╡рд░реНрдЧ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╣реЗрдЧрд╛ред


рдЫрд╡рд┐
рдХреНрд▓рд╛рдЗрдВрдЯ рдЦреЛрд▓реЗрдВ


Shape рд╕рд╛рд░


рдПрдХ рдЖрд╡реЗрджрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬреЛ рдПрдХ рдорд╛рдирдХ рдЬреАрдпреВрдЖрдИ рдореЗрдВ рдордВрдбрд▓рд┐рдпреЛрдВ рдФрд░ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдордВрдбрд▓рд┐рдпреЛрдВ рдФрд░ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреНрд░рдо рдореЗрдВ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕реА рдХреНрд░рдо рдореЗрдВ, рд╣рд▓рдХреЛрдВ рдФрд░ рд╡рд░реНрдЧреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╕рдВрдХрд▓рд┐рдд рдХреА рдЬрд╛рдПрдЧреА, рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдЗрд╕ рд╕реВрдЪреА рдореЗрдВ рдХреНрд░рдо рд╕реЗ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╕рд░реНрдХрд▓ рдпрд╛ рд╡рд░реНрдЧ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред


рд╕реА рдореЗрдВ, рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЬреЛ рдЦреБрд▓реЗ-рдкрд╛рд╕ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕рд╛ рдХрд┐ рд╕реВрдЪреА 1 рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣рд╛рдВ рд╣рдо рдПрдХ рд╣реА рддрддреНрд╡ рдХреЗ рд╕рд╛рде рдХрдИ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ рджреЗрдЦрддреЗ рд╣реИрдВред рдпрд╣ рддрддреНрд╡ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХреЛрдб рд╣реИ рдЬреЛ рдПрдХ рд╕рд░реНрдХрд▓ рдпрд╛ рд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддрд╛ рд╣реИред DrawAllShapes рдлрд╝рдВрдХреНрд╢рди рдЗрди рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреА рдПрдХ рд╕рд░рдгреА рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИ, рдкреНрд░рдХрд╛рд░ рдХреЛрдб рдХреЛ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд╕рдВрдмрдВрдзрд┐рдд рдлрд╝рдВрдХреНрд╢рди ( DrawCircle рдпрд╛ DrawSquare ) рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред


 // 1 //  /    enum ShapeType {circle, square} struct Shape { ShapeType itsType; }; struct Circle { ShapeType itsType; double itsRadius; Point itsCenter; }; struct Square { ShapeType itsType; double itsSide; Point itsTopLeft; }; // //     // void DrawSquare(struct Square*) void DrawCircle(struct Circle*); typedef struct Shape *ShapePointer; void DrawAllShapes(ShapePointer list[], int n) { int i; for (i=0; i<n; i++) { struct Shape* s = list[i]; switch (s->itsType) { case square: DrawSquare((struct Square*)s); break; case circle: DrawCircle((struct Circle*)s); break; } } } 

DrawAllShapes рдлрд╝рдВрдХреНрд╢рди рдЦреБрд▓реЗрдкрди-рдмрдВрдж рд╣реЛрдиреЗ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ DrawAllShapes , рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдирдП рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдХрд╛рд░реЛрдВ рд╕реЗ "рдмрдВрдж" рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЕрдЧрд░ рдореИрдВ рдЗрд╕ рд╕реВрдЪреА рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╕реВрдЪреА рд╕реЗ рдЖрдХреГрддрд┐рдпреЛрдВ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рддреНрд░рд┐рдХреЛрдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореБрдЭреЗ рдкреНрд░рддреНрдпреЗрдХ рдирдП рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдореБрдЭреЗ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


рдмреЗрд╢рдХ, рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗрд╡рд▓ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдореЗрдВ, DrawAllShapes рдлрд╝рдВрдХреНрд╢рди рд╕реЗ switch рдСрдкрд░реЗрдЯрд░ рдХреЛ рдкреВрд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдмрд╛рд░-рдмрд╛рд░ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреБрдЫ рдЕрд▓рдЧ рдХрд░реЗрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдирдП рдЖрдХрд╛рд░ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдРрд╕реЗ рд╕рднреА рд╕реНрдерд╛рди рдЬрд╣рд╛рдВ рдЗрд╕ рддрд░рд╣ рдХреЗ switch (рдпрд╛ if/else рдЪреЗрди) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдЖрдХрд╛рд░ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдмрд╣реБрдд рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рднреА switch рдФрд░ if/else рд╢реНрд░реГрдВрдЦрд▓рд╛ DrawAllShapes рдореЗрдВ рднреА рд╕рдВрд░рдЪрд┐рдд DrawAllShapes ред рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ if рдХреЛ рддрд╛рд░реНрдХрд┐рдХ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝ if рдЬрд╛рдПрдЧрд╛ рдпрд╛ case switch рдмреНрд▓реЙрдХ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЬреЛрдбрд╝ switch рдЬрд╛рдПрдЧрд╛ рдЬреИрд╕реЗ рдХреЛрдб рдореЗрдВ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╕реНрдерд╛рди рдХреЛ "рд╕рд░рд▓" рдХрд░рдирд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЙрди рд╕рднреА рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдФрд░ рд╕рдордЭрдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдЬрд╣рд╛рдВ рдЖрдкрдХреЛ рдПрдХ рдирдпрд╛ рдЖрдВрдХрдбрд╝рд╛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╡реЗ рдЧреИрд░-рддреБрдЪреНрдЫ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред


рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 2 рдореЗрдВ, рдореИрдВ рдХреЛрдб рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдЬреЛ рдПрдХ рд╡рд░реНрдЧ / рд╕рд░реНрдХрд▓ рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЦреБрд▓реЗрдкрди-рдмрдВрдж рд╣реЛрдиреЗ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рдПрдХ рд╕рд╛рд░ Shape рд╡рд░реНрдЧ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдЕрдореВрд░реНрдд рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рд╢реБрджреНрдз рдЖрднрд╛рд╕реА Draw рдлрдВрдХреНрд╢рди рд╣реЛрддрд╛ рд╣реИред Circle рдФрд░ Square рд╡рд░реНрдЧ Shape рдХреНрд▓рд╛рд╕ рдХреЗ рд╡рдВрд╢рдЬ рд╣реИрдВред


 // 2 //  /  - class Shape { public: virtual void Draw() const = 0; }; class Square : public Shape { public: virtual void Draw() const; }; class Circle : public Shape { public: virtual void Draw() const; }; void DrawAllShapes(Set<Shape*>& list) { for (Iterator<Shape*>i(list); i; i++) (*i)->Draw(); } 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ рд╣рдо рдПрдХ рдирдП рддрд░рд╣ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП DrawAllShapes 2 рдореЗрдВ DrawAllShapes рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдпрд╣ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдо Shape рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдирдпрд╛ рд╡рдВрд╢рдЬ рдЬреЛрдбрд╝ рджреЗрдВред DrawAllShapes рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, DrawAllShapes рдЦреБрд▓реЗрдкрди-рдирд┐рдХрдЯрддрд╛ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рдХрд╛рд░реНрдп рдХреЛ рдмрджрд▓реЗ рдмрд┐рдирд╛ рд╣реА рдЗрд╕рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдореЗрдВ, Shape рд╡рд░реНрдЧ рдореЗрдВ рдХрдИ рдЕрдиреНрдп рд╡рд┐рдзрд┐рдпрд╛рдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреАред рдФрд░ рдлрд┐рд░ рднреА, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдПрдХ рдирдпрд╛ рдЖрдХрд╛рд░ рдЬреЛрдбрд╝рдирд╛ рдЕрднреА рднреА рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдирдпрд╛ рд╡рд╛рд░рд┐рд╕ рджрд░реНрдЬ рдХрд░рдирд╛ рд╣реИ рдФрд░ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИред рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╡рд╛рд▓реЗ рд╕реНрдерд╛рдиреЛрдВ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдкреВрд░реЗ рдЖрд╡реЗрджрди рдХреЛ рдкрд░рд┐рдорд╛рд░реНрдЬрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред


рдЗрд╕рд▓рд┐рдП, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЬреЛ рдЦреБрд▓реЗрдкрди-рдирд┐рдХрдЯрддрд╛ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдирдП рдХреЛрдб рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдмрджрд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдореМрдЬреВрджрд╛ рдХреЛ рдмрджрд▓рдХрд░ рдирд╣реАрдВред рд╡реЗ рдЙрди рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реИрдВред


рдмрдВрдж рдХреА рдЧрдИ рдкреНрд░рд╡реЗрд╢ рд░рдгрдиреАрддрд┐


рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдХреЛрдИ рднреА рдХрд╛рд░реНрдпрдХреНрд░рдо 100% рдмрдВрдж рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 2 рдореЗрдВ DrawAllShapes рдлрдВрдХреНрд╢рди рдХрд╛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЕрдЧрд░ рд╣рдо рдпрд╣ рддрдп рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдкрд╣рд▓реЗ рд╕рд░реНрдХрд▓ рдФрд░ рдлрд┐рд░ рд╕реНрдХреНрд╡рд╛рдпрд░ рддреИрдпрд╛рд░ рдХрд┐рдП рдЬрд╛рдПрдВ? рдЗрд╕ рддрд░рд╣ рдХреЗ рдмрджрд▓рд╛рд╡ рд╕реЗ DrawAllShapes рдлрд╝рдВрдХреНрд╢рди рдмрдВрдж рдирд╣реАрдВ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рдХреИрд╕реЗ "рдмрдВрдж" рд╣реИ, рд╣рдореЗрд╢рд╛ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдпрд╣ рдмрдВрдж рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред


рдЪреВрдВрдХрд┐ рдХреНрд▓реЛрдЬрд░ рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕реЗ рд░рдгрдиреАрддрд┐рдХ рд░реВрдк рд╕реЗ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣реА рд╣реИ, рдбрд┐рдЬрд╛рдЗрдирд░ рдХреЛ рдЙрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рдирд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрдиреБрднрд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдПрдХ рдЕрдиреБрднрд╡реА рдбреЗрд╡рд▓рдкрд░ рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдФрд░ рдЙрджреНрдпреЛрдЧ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬрд╛рдирддрд╛ рд╣реИред рд╡рд╣ рддрдм рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЦреБрд▓реЗрдкрди-рдирд┐рдХрдЯрддрд╛ рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рд┐рдд рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдореНрдорд╛рдирд┐рдд рд╣реИред


рдЕрддрд┐рд░рд┐рдХреНрдд рдирд┐рдХрдЯрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдореВрд░реНрддрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ


рд╣рдо рдбреНрд░рд╛рдЗрдВрдЧ рдСрд░реНрдбрд░ рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╕реЗ DrawAllShapes рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреИрд╕реЗ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдмрдВрдж рд╣реЛрдирд╛ рдЕрдореВрд░реНрддрддрд╛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдЗрд╕рд▓рд┐рдП, DrawAllShapes рдХреЛ рдСрд░реНрдбрд░ рдХрд░рдиреЗ рд╕реЗ DrawAllShapes рд▓рд┐рдП, рд╣рдореЗрдВ "рдСрд░реНрдбрд░рд┐рдВрдЧ рдПрдмреНрд╕реНрдЯреНрд░рдХреНрд╢рди" рдХреЗ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрджреЗрд╢ рджреЗрдиреЗ рдХрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛, рдКрдкрд░ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдВрдХрдбрд╝реЗ рдХреЛ рджреВрд╕рд░реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рд╕рд╛рдордиреЗ рдЦреАрдВрдЪ рд░рд╣рд╛ рд╣реИред


рдЖрджреЗрд╢ рджреЗрдиреЗ рдХреА рдиреАрддрд┐ рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рд╣реИ рдХрд┐ рджреЛ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде, рдЖрдк рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕рд╛ рдкрд╣рд▓реЗ рдЦреАрдВрдЪрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рд▓рд┐рдП, рд╣рдо Shape рдирд╛рдордХ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ Precedes рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдЕрдиреНрдп Shape рд╡рд╕реНрддреБ рдХреЛ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдмреВрд▓рд┐рдпрди рдорд╛рди рдХреЛ true рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдпрджрд┐ рдпрд╣ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ Shape рд╡рд░реНрдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ Shape рд╡рд░реНрдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдкрд╣рд▓реЗ рд╕реЙрд░реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ред


C ++ рдореЗрдВ, рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ "<" рдСрдкрд░реЗрдЯрд░ рдХреЛ рдУрд╡рд░рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред 3 рдХреА рд╕реВрдЪреА Shape рд╡рд░реНрдЧ рдХреЛ рдЫрдБрдЯрд╛рдИ рдХреЗ рддрд░реАрдХреЛрдВ рд╕реЗ рджрд┐рдЦрд╛рддрд╛ рд╣реИред


рдЕрдм рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ Shape рд╡рд░реНрдЧ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдХреНрд░рдо рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ, рд╣рдо рдЙрдиреНрд╣реЗрдВ рд╕реЙрд░реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 4 рдЗрд╕реА C ++ рдХреЛрдб рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдпрд╣ рдореЗрд░реА рдкреБрд╕реНрддрдХ рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд Components рд╢реНрд░реЗрдгреА рд╕реЗ Set , OrderedSet рдФрд░ Iterator рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ (рдмреВрдЪ рд╡рд┐рдзрд┐, рд░реЙрдмрд░реНрдЯ рд╕реАред рдорд╛рд░реНрдЯрд┐рди, рдЕрдкреНрд░реЗрдВрдЯрд┐рд╕ рд╣реЙрд▓, 1995 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд┐рдЬрд╛рдЗрдирд┐рдВрдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рдУрд░рд┐рдПрдВрдЯреЗрдб рд╕реА ++ рдПрдкреНрд▓реАрдХреЗрд╢рди)ред


рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ Shape рд╡рд░реНрдЧ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдХреНрд░рдо рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЙрдЪрд┐рдд рдХреНрд░рдо рдореЗрдВ рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдСрд░реНрдбрд░рд┐рдВрдЧ рдХреЗ рдЕрдореВрд░реНрддрди рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рд╣реИред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдСрд░реНрдбрд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ Shape рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ Precedes рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ? Circle::Precedes рдореЗрдВ рдХрд┐рд╕ рдХреЛрдб рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ Circle::Precedes рддрд╛рдХрд┐ рд╡реГрддреНрдд рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛрдВ? рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 5 рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред


 // 3 //  Shape    . class Shape { public: virtual void Draw() const = 0; virtual bool Precedes(const Shape&) const = 0; bool operator<(const Shape& s) {return Precedes(s);} }; 

 // 4 // DrawAllShapes   void DrawAllShapes(Set<Shape*>& list) { //    OrderedSet  . OrderedSet<Shape*> orderedList = list; orderedList.Sort(); for (Iterator<Shape*> i(orderedList); i; i++) (*i)->Draw(); } 

 // 5 //    bool Circle::Precedes(const Shape& s) const { if (dynamic_cast<Square*>(s)) return true; else return false; } 

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдЦреБрд▓реЗрдкрди-рдирд┐рдХрдЯрддрд╛ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред Shape рдХреНрд▓рд╛рд╕ рдХреЗ рдирдП рд╡рдВрд╢рдЬреЛрдВ рд╕реЗ рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рд╣рд░ рдмрд╛рд░ Shape рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдирдпрд╛ рд╡рдВрд╢рдЬ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред


рдХреНрд▓реЛрдЬрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдбреНрд░рд┐рд╡рди рдЕрдкреНрд░реЛрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


Shape рд╡рд░реНрдЧ рдХреЗ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░рд┐рдпреЛрдВ рдХреА рдирд┐рдХрдЯрддрд╛ рдПрдХ рд╕рд╛рд░рдгреАрдмрджреНрдз рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд░рд╛рд╕рдд рд╡рд░реНрдЧ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЙрддреНрддреЗрдЬрд┐рдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕реВрдЪреА 6 рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред


рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдордиреЗ DrawAllShapes рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдСрд░реНрдбрд░ рдХрд░рдиреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рд╕реЗ, рдФрд░ Shape рдХреНрд▓рд╛рд╕ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рдВрд╢рдЬ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ - рдПрдХ рдирдП рд╡рдВрд╢ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдпрд╛ Shape рдХреНрд▓рд╛рд╕ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреА рдСрд░реНрдбрд░рд┐рдВрдЧ рдкреЙрд▓рд┐рд╕реА рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╕реЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬреИрд╕реЗ рдХрд┐ Squares рд╡рд░реНрдЧ рдХреА рд╡рд╕реНрддреБрдПрдВ) рдкрд╣рд▓реЗ рдЦреАрдВрдЪрд╛ рдЬрд╛рдП)ред


 // 6 //     #include <typeinfo.h> #include <string.h> enum {false, true}; typedef int bool; class Shape { public: virtual void Draw() const = 0; virtual bool Precedes(const Shape&) const; bool operator<(const Shape& s) const {return Precedes(s);} private: static char* typeOrderTable[]; }; char* Shape::typeOrderTable[] = { "Circle", "Square", 0 }; //      . //   ,    //  . ,    , //      bool Shape::Precedes(const Shape& s) const { const char* thisType = typeid(*this).name(); const char* argType = typeid(s).name(); bool done = false; int thisOrd = -1; int argOrd = -1; for (int i=0; !done; i++) { const char* tableEntry = typeOrderTable[i]; if (tableEntry != 0) { if (strcmp(tableEntry, thisType) == 0) thisOrd = i; if (strcmp(tableEntry, argType) == 0) argOrd = i; if ((argOrd > 0) && (thisOrd > 0)) done = true; } else // table entry == 0 done = true; } return thisOrd < argOrd; } 

рдПрдХрдорд╛рддреНрд░ рддрддреНрд╡ рдЬреЛ рдбреНрд░рд╛рдЗрдВрдЧ рдЖрдХреГрддрд┐рдпреЛрдВ рдХреЗ рдХреНрд░рдо рдХреЛ рдмрджрд▓рдиреЗ рд╕реЗ рдмрдВрдж рдирд╣реАрдВ рд╣реИ, рд╡рд╣ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рд╣реИред рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдЕрдиреНрдп рд╕рднреА рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдХреЗ рдПрдХ рдЕрд▓рдЧ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред


рдЖрдЧреЗ рдмрдВрдж


рдпрд╣ рдХрд╣рд╛рдиреА рдХрд╛ рдЕрдВрдд рдирд╣реАрдВ рд╣реИред рд╣рдордиреЗ Shape рд╡рд░реНрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрд░реНрдбрд░ рдиреАрддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рд╕реЗ Shape рд╡рд░реНрдЧ рдФрд░ DrawAllShapes рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, Shape рд╡рд░реНрдЧ рдХреЗ рд╡рдВрд╢рдЬ рдЙрди рдиреАрддрд┐рдпреЛрдВ рдХреЛ рдЖрджреЗрд╢ рджреЗрдиреЗ рд╕реЗ рдмрдВрдж рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ Shape рдкреНрд░рдХрд╛рд░реЛрдВ рд╕реЗ рд╕рдВрдмрджреНрдз рдирд╣реАрдВ рд╣реИрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЖрдХреГрддрд┐рдпреЛрдВ рдХреЗ рдЖрд░реЗрдЦрдг рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рдЕрдзреНрдпрдпрди рдЗрд╕ рд▓реЗрдЦ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рд╣реИ; рд╣рд╛рд▓рд╛рдБрдХрд┐, рдПрдХ рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓рд╛ рдкрд╛рдардХ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ OrderedObject рдХреНрд▓рд╛рд╕ рдореЗрдВ рдирд┐рд╣рд┐рдд рдЕрдореВрд░реНрдд OrderedObject рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ OrderedShape , рдЬреЛ рдХрд┐ Shape рдФрд░ OrderedObject рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред


рд╣реЗрдпреВрд░рд┐рд╕реНрдЯрд┐рдХреНрд╕ рдФрд░ рдХрдиреНрд╡реЗрдВрд╢рди


рдЬреИрд╕рд╛ рдХрд┐ рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЦреБрд▓реЗрдкрди-рдШрдирд┐рд╖реНрдарддрд╛ рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрдИ рдЕрдиреБрдорд╛рдиреЛрдВ рдФрд░ рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХреЗ рдкреАрдЫреЗ рдХреА рдкреНрд░рдореБрдЦ рдкреНрд░реЗрд░рдгрд╛ рд╣реИ рдЬреЛ рдУрдУрдкреА рдкреНрд░рддрд┐рдорд╛рди рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдЙрднрд░реЗ рд╣реИрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВред


рд╕рднреА рд╕рджрд╕реНрдп рдЪрд░ рдХреЛ рдирд┐рдЬреА рдмрдирд╛рдПрдВ


рдпрд╣ рдкреАрдПрд▓рдУ рдХреЗ рд╕рдмрд╕реЗ рд╕реНрдерд╛рдпреА рд╕рдореНрдореЗрд▓рдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рд╕рджрд╕реНрдп рдЪрд░ рдХреЛ рдХреЗрд╡рд▓ рдЙрд╕ рдХрдХреНрд╖рд╛ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдореЗрдВ рд╡реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИрдВред рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд░реНрдЧреЛрдВ рд╕рд╣рд┐рдд рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ private рдПрдХреНрд╕реЗрд╕ рд╕рдВрд╢реЛрдзрдХ рдХреЗ рд╕рд╛рде рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, public рдпрд╛ protected ред
рдЦреБрд▓реЗрдкрди-рдШрдирд┐рд╖реНрдарддрд╛ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдкреНрд░рдХрд╛рд╢ рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдореНрдореЗрд▓рди рдХрд╛ рдХрд╛рд░рдг рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдЬрдм рдХрдХреНрд╖рд╛ рд╕рджрд╕реНрдп рдЪрд░ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдЙрди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣реА рд╣реИ, рдлрд╝рдВрдХреНрд╢рди рдЗрди рдЪрд░реЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдмрдВрдж рдирд╣реАрдВ рд╣реИред


OOP рдореЗрдВ, рд╣рдо рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рд╡рд░реНрдЧ рдХреЗ рддрд░реАрдХреЗ рдЙрди рдЪрд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рдмрдВрдж рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рд╕рджрд╕реНрдп рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдо рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЙрдкрд╡рд░реНрдЧ рд╕рд╣рд┐рдд рдХреЛрдИ рднреА рдЕрдиреНрдп рд╡рд░реНрдЧ рдЗрди рдЪрд░реЛрдВ рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╕реЗ рдмрдВрдж рд╣реИред рдЗрд╕реЗ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред


рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЪрд░ рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реИрдВ рдХрд┐ рдпрд╣ рдХрднреА рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛? рдХреНрдпрд╛ рдЗрд╕реЗ private рдмрдирд╛рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рд╣реИ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реВрдЪреАрдмрджреНрдз 7 Device рд╡рд░реНрдЧ рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЪрд░ рд╕рджрд╕реНрдп bool status ред рдпрд╣ рдЕрдВрддрд┐рдо рдСрдкрд░реЗрд╢рди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдСрдкрд░реЗрд╢рди рд╕рдлрд▓ рд░рд╣рд╛, рддреЛ status рдЪрд░ рдХрд╛ рдореВрд▓реНрдп true рд╣реЛрдЧрд╛, рдЕрдиреНрдпрдерд╛ false ред


 // 7 //   class Device { public: bool status; }; 

рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рдЪрд░ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдпрд╛ рдЕрд░реНрде рдХрднреА рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛ред рддреЛ рдХреНрдпреЛрдВ рди рдЗрд╕реЗ public рдФрд░ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдЗрд╕ рддрдХ рд╕реАрдзреА рдкрд╣реБрдБрдЪ рджреА рдЬрд╛рдП? рдпрджрд┐ рдЪрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрднреА рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ, рдпрджрд┐ рд╕рднреА рдЧреНрд░рд╛рд╣рдХ рдирд┐рдпрдореЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ рдЗрд╕ рдЪрд░ рд╕реЗ рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рддрдереНрдп рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдЧрд▓рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЪрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рдмрд╛рдд рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рдпрджрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдореЗрдВ рд╕реЗ рдХреЛрдИ рдПрдХ рдЗрд╕ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рд▓рд┐рдЦрдиреЗ рдФрд░ рдЗрд╕рдХреЗ рдореВрд▓реНрдп рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд▓реЗрддрд╛ рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ред


рдЕрдЪрд╛рдирдХ, рдпрд╣ рдХреНрд▓рд╛рдЗрдВрдЯ Device рд╡рд░реНрдЧ рдХреЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рдЧрд▓рдд рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ Device рд╡рд░реНрдЧ рдХреЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдмрдВрдж рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЬреЛрдЦрд┐рдо рд╣реИред


рджреВрд╕рд░реА рдУрд░, рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ Time рдХреНрд▓рд╛рд╕ рд╣реИ, рдЬреЛ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 8 рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рдкреНрд░рдЪрд╛рд░ рдХрд╛ рдЦрддрд░рд╛ рдХреНрдпрд╛ рд╣реИ? рдпрд╣ рдмрд╣реБрдд рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡реЗ рдмрджрд▓ рдЬрд╛рдПрдВрдЧреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдореЙрдбреНрдпреВрд▓ рдЗрди рдЪрд░реЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрди рдЪрд░реЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рднреА рдмрд╣реБрдд рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рдХрдХреНрд╖рд╛рдПрдВ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╕рджрд╕реНрдп рдЪрд░ рдХреЗ рдореВрд▓реНрдп рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░ рд╕рдХрддреА рд╣реИрдВред рддреЛ рдХреНрдпрд╛ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ?


 // 8 class Time { public: int hours, minutes, seconds; Time& operator-=(int seconds); Time& operator+=(int seconds); bool operator< (const Time&); bool operator> (const Time&); bool operator==(const Time&); bool operator!=(const Time&); }; 

рд╕реВрдЪреА 8 рдореЗрдВ рдореИрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╢рд┐рдХрд╛рдпрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рд╕рдордп рдкрд░рд┐рд╡рд░реНрддрди рдкрд░рдорд╛рдгреБ рдирд╣реАрдВ рд╣реИред рдпрд╣реА рд╣реИ, рдХреНрд▓рд╛рдЗрдВрдЯ hours рдЪрд░ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдмрджрд▓реЗ рдмрд┐рдирд╛ minutes рдЪрд░ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЕрд╕рдВрдЧрдд рдбреЗрдЯрд╛ рдХреЛ рд╕рдореНтАНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Time рдХреНрд▓рд╛рд╕ рдХреА рдПрдХ рд╡рд╕реНрддреБ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рд╕рдордп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдлрд╝рдВрдХреНрд╢рди рд╢реБрд░реВ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рддреАрди рддрд░реНрдХ рд╣реЛрдВрдЧреЗ, рдЬреЛ рд╕рдордп рдХреЛ рдПрдХ рдкрд░рдорд╛рдгреБ рд╕рдВрдЪрд╛рд▓рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдХрдордЬреЛрд░ рддрд░реНрдХ рд╣реИред


рдЕрдиреНрдп рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЖрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдЬрд┐рд╕рдХреЗ рддрд╣рдд рдЗрди рдЪрд░реЛрдВ рдХреЗ рдкреНрд░рдЪрд╛рд░ рд╕реЗ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдЕрдВрддрддрдГ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрдиреНрд╣реЗрдВ private рдмрдирд╛рдиреЗ рдХрд╛ рдХреЛрдИ рдареЛрд╕ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рдЕрднреА рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЪрд░ рдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХрд░рдирд╛ рдПрдХ рдмреБрд░реА рд╢реИрд▓реА рд╣реИ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдмреБрд░рд╛ рдбрд┐рдЬрд╛рдЗрди рдирд╣реАрдВ рд╣реИред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЦрд░рд╛рдм рд╢реИрд▓реА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрди рд╕рджрд╕реНрдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ рдХреБрдЫ рднреА рдЦрд░реНрдЪ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдмрдВрдж рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рд╕рдВрднрд╛рд╡рд┐рдд рдШрдЯрдирд╛ рд╕реЗ рдЬреБрдбрд╝реЗ рдЫреЛрдЯреЗ рдЬреЛрдЦрд┐рдо рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реИред


рдЗрд╕рд▓рд┐рдП, рдРрд╕реЗ рджреБрд░реНрд▓рдн рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЬрдм рдЦреБрд▓реЗрдкрди-рдмрдВрдж рд╣реЛрдиреЗ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ public рдХрд╛ рдирд┐рд╖реЗрдз - рдФрд░ protected рдЪрд░ рд╢реИрд▓реА рдкрд░ рдЕрдзрд┐рдХ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рд╛рдордЧреНрд░реА рдкрд░ рдирд╣реАрдВред


рдХреЛрдИ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ ... рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ!


рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдХреЗ рдЦрд┐рд▓рд╛рдл рддрд░реНрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рджрд╕реНрдп рдЪрд░ рдХреЗ рдЦрд┐рд▓рд╛рдл рддрд░реНрдХ рдХреЗ рд╕рдорд╛рди рд╣реИред рдХреЛрдИ рднреА рдореЙрдбреНрдпреВрд▓ рдЬреЛ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдЙрд╕реЗ рдЙрд╕ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЙрд╕реЗ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИред рдХреЛрдИ рднреА рдореЙрдбреНрдпреВрд▓ рдЬреЛ рдЗрд╕ рд╡реИрд░рд┐рдПрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рддрд░реАрдХреЗ рд╕реЗ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рджреНрд╡рд╛рд░рд╛ рдЕрднрд┐рдкреНрд░реЗрдд рдирд╣реАрдВ рд╣реИ, рдЗрди рдореЙрдбреНрдпреВрд▓ рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛ред рдПрдХ рдПрдХрд▓ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдореЙрдбреНрдпреВрд▓ рдХреА рдпреЛрдирд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдХрдИ рдореЙрдбреНрдпреВрд▓ рд╣реЛрдирд╛ рдмрд╣реБрдд рдЬреЛрдЦрд┐рдо рднрд░рд╛ рд╣реИред
рджреВрд╕рд░реА рдУрд░, рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЬрд╣рд╛рдВ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдореЗрдВ рдмрд╣реБрдд рдХрдо рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдЙрди рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрддреЗ рд╣реИрдВ рдпрд╛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдХреЛрдИ рдиреБрдХрд╕рд╛рди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдбрд┐рдЬрд╛рдЗрдирд░ рдХреЛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЧреЛрдкрдиреАрдпрддрд╛ рдХрд┐рддрдиреА рд╣реИ рдФрд░ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕реБрд╡рд┐рдзрд╛ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реИ рдпрд╛ рдирд╣реАрдВред


рдпрд╣рд╛рдВ рдлрд┐рд░ рд╕реЗ, рд╢реИрд▓реА рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ рдЦреЗрд▓ рдореЗрдВ рдЖрддреА рд╣реИрдВред рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдк рдЖрдорддреМрд░ рдкрд░ рд╕рд╕реНрддреА рд╣реИрдВред рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдПрдХ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬреЛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЫреЛрдЯрд╛, рд▓реЗрдХрд┐рди рдПрдХ рддрдХрдиреАрдХ рдХреЗ рдмрдЬрд╛рдп рдмрдВрдж рд╣реЛрдиреЗ рдХрд╛ рдЬреЛрдЦрд┐рдо рдЬреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЬреЛрдЦрд┐рдо рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрддрд╛ рд╣реИ, рдЦрд░рд╛рдм рд╢реИрд▓реА рдХрд╛ рд╕рдВрдХреЗрдд рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрднреА-рдХрднреА рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрддрд╛ рд╣реИред рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░рд╡рд╛рд╣рд╛ рдХреВрдЯ рдФрд░ рд╕рд┐рдиреЗрдорд╛ рд╣реИред рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпрджрд┐ рдЦреБрд▓реЗрдкрди-рдирд┐рдХрдЯрддрд╛ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рд╢реИрд▓реА рдХрд╛ рддреНрдпрд╛рдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


RTTI рдЦрддрд░рдирд╛рдХ рд╣реИ


рдПрдХ рдЕрдиреНрдп рд╕рд╛рдорд╛рдиреНрдп рдирд┐рд╖реЗрдз dynamic_cast рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИред рдмрд╣реБрдд рдмрд╛рд░, dynamic_cast рдпрд╛ рдХреБрдЫ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рд░рдирдЯрд╛рдЗрдо рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рдг (рдЖрд░рдЯреАрдЯреАрдЖрдИ) рдкрд░ рдПрдХ рдЕрддреНрдпрдВрдд рдЦрддрд░рдирд╛рдХ рддрдХрдиреАрдХ рд╣реЛрдиреЗ рдХрд╛ рдЖрд░реЛрдк рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЯрд╛рд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрд╕реА рд╕рдордп, рд╡реЗ рдЕрдХреНрд╕рд░ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 9 рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрддреЗ рд╣реИрдВ, рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЦреБрд▓реЗрдкрди-рдирд┐рдХрдЯрддрд╛ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╕реВрдЪреА 10 рдПрдХ рд╕рдорд╛рди рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬреЛ рдЦреБрд▓реЗ-рдмрдВрдж рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд┐рдП рдмрд┐рдирд╛ dynamic_cast рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред


рдЙрдирдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд▓рд┐рд╕реНрдЯ 9 рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рд░ рдмрд╛рд░ рдХреЛрдб рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, Shape рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдирдпрд╛ рд╡рдВрд╢ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ (рдпрд╣ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмрд┐рд▓реНрдХреБрд▓ рд╣рд╛рд╕реНрдпрд╛рд╕реНрдкрдж рд╕рдорд╛рдзрд╛рди рд╣реИ)ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 10 рдореЗрдВ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд┐рд╕реА рднреА рдмрджрд▓рд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╕реВрдЪреА 10 рдореЗрдВ рдХреЛрдб рдЦреБрд▓реЗ-рдмрдВрдж рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрдВрдЧреВрдареЗ рдХрд╛ рдирд┐рдпрдо рдпрд╣ рд╣реИ рдХрд┐ рдЖрд░рдЯреАрдЯреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЕрдЧрд░ рдЦреБрд▓реЗрдкрди-рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


 // 9 //RTTI,   -. class Shape {}; class Square : public Shape { private: Point itsTopLeft; double itsSide; friend DrawSquare(Square*); }; class Circle : public Shape { private: Point itsCenter; double itsRadius; friend DrawCircle(Circle*); }; void DrawAllShapes(Set<Shape*>& ss) { for (Iterator<Shape*>i(ss); i; i++) { Circle* c = dynamic_cast<Circle*>(*i); Square* s = dynamic_cast<Square*>(*i); if (c) DrawCircle(c); else if (s) DrawSquare(s); } } 

 // 10 //RTTI,    -. class Shape { public: virtual void Draw() cont = 0; }; class Square : public Shape { // . }; void DrawSquaresOnly(Set<Shape*>& ss) { for (Iterator<Shape*>i(ss); i; i++) { Square* s = dynamic_cast<Square*>(*i); if (s) s->Draw(); } } 

рдирд┐рд╖реНрдХрд░реНрд╖


рдореИрдВ рдЦреБрд▓реЗрдкрди-рдШрдирд┐рд╖реНрдарддрд╛ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдмрд╛рдд рдХрд░ рд╕рдХрддрд╛ рдерд╛ред рдХрдИ рдорд╛рдпрдиреЛрдВ рдореЗрдВ, рдпрд╣ рд╕рд┐рджреНрдзрд╛рдВрдд рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЕрдиреБрдкрд╛рд▓рди рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рддрдХрдиреАрдХ рдХреЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рд╛рдн рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН рдкреБрди: рдЙрдкрдпреЛрдЧ рдФрд░ рд╕рдорд░реНрдердиред


, - -. , , , , , .

Source: https://habr.com/ru/post/hi472186/


All Articles