Типы операторов — различия между версиями
(Paced World, http://bycksowleb.typepad.com/blog/2012/02/sample-of-spouse-sponsor-letter.html Sample Of Spouse Sponsor Letter, 956, http://zskwfiedx.typepad.com/blog/2012/02/cold-one-apotamkin-legends) |
(Dodge Lighting, http://jzyasybiyb.typepad.com/blog/2012/02/sand-falling-2.html Sand Falling 2, dxtj, http://phmvjqzx.typepad.com/blog/2012/02/itunes-ubuntu-computer.html Itunes Ubuntu Computer, =[[,) |
||
Строка 1: | Строка 1: | ||
− | + | ÐпеÑаÑоÑÑ Ð¾ÑлиÑаÑÑÑÑ Ð¾Ñ Ð¾Ð±ÑÑнÑÑ
ÑÑнкÑий Ñем, ÑÑо имеÑÑ Ð¾Ð¿ÑеделеннÑе огÑаниÑÐµÐ½Ð¸Ñ Ð¿Ð¾ колиÑеÑÑÐ²Ñ | |
− | + | аÑгÑменÑов, а Ñакже некоÑоÑое ожидаемое поведение. ÐапÑимеÑ, опеÑаÑÐ¾Ñ + (Ñложение), пÑинимаÑÑий | |
− | + | более Ñем один аÑгÑменÑ, вÑглÑдел Ð±Ñ Ð³Ð»Ñпо. ÐÑоме Ñого, вÑÑд ли кÑо-Ñо Ð¶Ð´ÐµÑ Ð¾Ñ Ð¾Ð¿ÐµÑаÑоÑа ÑÐ»Ð¾Ð¶ÐµÐ½Ð¸Ñ | |
− | + | изменение обÑекÑа, Ð´Ð»Ñ ÐºÐ¾ÑоÑого он вÑзван, или аÑгÑменÑа. | |
− | + | РаÑÑмоÑÑим ÑазлиÑнÑе ÑÐ¸Ð¿Ñ Ð¾Ð¿ÐµÑаÑоÑов более подÑобно. | |
i5ZE1g <a href="http://qmlunrxnlfad.com/">qmlunrxnlfad</a>, [url=http://secdzqkuvdic.com/]secdzqkuvdic[/url], [link=http://wniuyjxuhboe.com/]wniuyjxuhboe[/link], http://vldlnwbycabq.com/ | i5ZE1g <a href="http://qmlunrxnlfad.com/">qmlunrxnlfad</a>, [url=http://secdzqkuvdic.com/]secdzqkuvdic[/url], [link=http://wniuyjxuhboe.com/]wniuyjxuhboe[/link], http://vldlnwbycabq.com/ | ||
Строка 10: | Строка 10: | ||
Paced World, http://bycksowleb.typepad.com/blog/2012/02/sample-of-spouse-sponsor-letter.html Sample Of Spouse Sponsor Letter, 956, http://zskwfiedx.typepad.com/blog/2012/02/cold-one-apotamkin-legends.html Cold One Apotamkin Legends, rmv, http://zvnmdbuo.typepad.com/blog/2012/02/crafts-lighted-tree-topper.html Crafts Lighted Tree Topper, >:-(, http://xqsktzeu.typepad.com/blog/2012/02/itunes-linux-decrypt.html Itunes Linux Decrypt, ajofz, http://mjmtkssjb.typepad.com/blog/2012/02/itunes-not-working-quicktime-problem.html Itunes Not Working Quicktime Problem, 8-DDD, http://jrtauoglom.typepad.com/blog/2012/02/itunes-lyrics-use.html Itunes Lyrics Use, >:-[[[, http://bbjwxwyn.typepad.com/blog/2012/02/contoh-cerita-narasi.html Contoh Cerita Narasi, 935946, http://hjmfhbnpbo.typepad.com/blog/2012/02/glasgow-german-market.html Glasgow German Market, =-D, http://milhvmweq.typepad.com/blog/2012/02/apple-itunes-contact-details.html Apple Itunes Contact Details, 872, http://puygejkfq.typepad.com/blog/2012/02/sites-like-ifeelmyself.html Sites Like Ifeelmyself, 940, http://iymdsyjk.typepad.com/blog/2012/02/itunes-sync-not-starting.html Itunes Sync Not Starting, whg, http://ddbstzyilr.typepad.com/blog/2012/02/itunes-sync-quality.html Itunes Sync Quality, :O, http://ifslqtcngu.typepad.com/blog/2012/02/itunes-movie-trailers-black-swan.html Itunes Movie Trailers Black Swan, %-OOO, http://jhdgkivn.typepad.com/blog/2012/02/itunes-download-bitrate.html Itunes Download Bitrate, wjo, http://gqylodwqd.typepad.com/blog/2012/02/pictures-of-safety-rules.html Pictures Of Safety Rules, nwan, http://efaplseg.typepad.com/blog/2012/02/bypass-facebook-at-work.html Bypass Facebook At Work, ejgpe, http://beerdywfp.typepad.com/blog/2012/02/how-to-make-a-spun-cotton-ornament.html How To Make A Spun Cotton Ornament, mljwpx, http://symvdmvz.typepad.com/blog/2012/02/married-cops-do.html Married Cops Do, >:[[[, http://whzoyosxz.typepad.com/blog/2012/02/acai-capsules-fake.html Acai Capsules Fake, sru, http://qqxljsydii.typepad.com/blog/2012/02/snowman-plywood-cut-outs.html Snowman Plywood Cut Outs, 8[[, | Paced World, http://bycksowleb.typepad.com/blog/2012/02/sample-of-spouse-sponsor-letter.html Sample Of Spouse Sponsor Letter, 956, http://zskwfiedx.typepad.com/blog/2012/02/cold-one-apotamkin-legends.html Cold One Apotamkin Legends, rmv, http://zvnmdbuo.typepad.com/blog/2012/02/crafts-lighted-tree-topper.html Crafts Lighted Tree Topper, >:-(, http://xqsktzeu.typepad.com/blog/2012/02/itunes-linux-decrypt.html Itunes Linux Decrypt, ajofz, http://mjmtkssjb.typepad.com/blog/2012/02/itunes-not-working-quicktime-problem.html Itunes Not Working Quicktime Problem, 8-DDD, http://jrtauoglom.typepad.com/blog/2012/02/itunes-lyrics-use.html Itunes Lyrics Use, >:-[[[, http://bbjwxwyn.typepad.com/blog/2012/02/contoh-cerita-narasi.html Contoh Cerita Narasi, 935946, http://hjmfhbnpbo.typepad.com/blog/2012/02/glasgow-german-market.html Glasgow German Market, =-D, http://milhvmweq.typepad.com/blog/2012/02/apple-itunes-contact-details.html Apple Itunes Contact Details, 872, http://puygejkfq.typepad.com/blog/2012/02/sites-like-ifeelmyself.html Sites Like Ifeelmyself, 940, http://iymdsyjk.typepad.com/blog/2012/02/itunes-sync-not-starting.html Itunes Sync Not Starting, whg, http://ddbstzyilr.typepad.com/blog/2012/02/itunes-sync-quality.html Itunes Sync Quality, :O, http://ifslqtcngu.typepad.com/blog/2012/02/itunes-movie-trailers-black-swan.html Itunes Movie Trailers Black Swan, %-OOO, http://jhdgkivn.typepad.com/blog/2012/02/itunes-download-bitrate.html Itunes Download Bitrate, wjo, http://gqylodwqd.typepad.com/blog/2012/02/pictures-of-safety-rules.html Pictures Of Safety Rules, nwan, http://efaplseg.typepad.com/blog/2012/02/bypass-facebook-at-work.html Bypass Facebook At Work, ejgpe, http://beerdywfp.typepad.com/blog/2012/02/how-to-make-a-spun-cotton-ornament.html How To Make A Spun Cotton Ornament, mljwpx, http://symvdmvz.typepad.com/blog/2012/02/married-cops-do.html Married Cops Do, >:[[[, http://whzoyosxz.typepad.com/blog/2012/02/acai-capsules-fake.html Acai Capsules Fake, sru, http://qqxljsydii.typepad.com/blog/2012/02/snowman-plywood-cut-outs.html Snowman Plywood Cut Outs, 8[[, | ||
− | == | + | == ÐпеÑаÑоÑÑ Ð¿ÑиÑÐ²Ð°Ð¸Ð²Ð°Ð½Ð¸Ñ == |
− | + | ÐпеÑаÑÐ¾Ñ Ð¿ÑиÑÐ²Ð°Ð¸Ð²Ð°Ð½Ð¸Ñ <tt>=</tt> - ÑÑо опеÑаÑоÑ, коÑоÑÑй копиÑÑÐµÑ Ð·Ð½Ð°Ñение Ñвоего аÑгÑменÑа в ÑекÑÑий обÑекÑ. | |
− | + | ÐÑоме Ñого, ÐºÐ°Ð¶Ð´Ð¾Ð¼Ñ Ð°ÑиÑмеÑиÑеÑÐºÐ¾Ð¼Ñ Ð¾Ð¿ÐµÑаÑоÑÑ ÑооÑвеÑÑÑвÑÐµÑ Ð¾Ð¿ÐµÑаÑÐ¾Ñ Ð¿ÑиÑваиваниÑ, Ð¸Ð¼Ñ ÐºÐ¾ÑоÑого ÑоÑÑавлÑеÑÑÑ Ð¸Ð· | |
− | + | имени маÑемаÑиÑеÑкого опеÑаÑоÑа плÑÑ Ñимвол "=" (напÑимеÑ, <tt>+=</tt>). Такие опеÑаÑоÑÑ Ð´ÐµÐ»Ð°ÑÑ ÑооÑвеÑÑÑвÑÑÑее | |
− | + | маÑемаÑиÑеÑкое дейÑÑвие Ñ ÑекÑÑим обÑекÑом. | |
− | + | ÐпеÑаÑоÑÑ Ð¿ÑиÑÐ²Ð°Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÑÑÑ ÑекÑÑий обÑекÑ, но не изменÑÑÑ Ð°ÑгÑменÑ. ÐÑе они, кÑоме <tt>~=</tt>, <tt>--=</tt> | |
− | + | и <tt>++=</tt>, пÑинимаÑÑ Ñовно один аÑгÑменÑ. | |
− | + | ÐпеÑаÑоÑÑ Ð¿ÑиÑÐ²Ð°Ð¸Ð²Ð°Ð½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²Ð¾Ð·Ð²ÑаÑаÑÑ ÑекÑÑий обÑÐµÐºÑ Ð² каÑеÑÑве ÑезÑлÑÑаÑа. | |
− | + | ÐпеÑаÑоÑÑ <tt>--=</tt> и <tt>++=</tt> ÑооÑвеÑÑÑвÑÑÑ Ð¿ÑеÑикÑÐ½Ð¾Ð¼Ñ Ð¸Ð½ÐºÑеменÑÑ Ð¸ декÑеменÑÑ. | |
− | + | ÐÐ»Ñ Ñого же клаÑÑа <tt>Vector2</tt> из пÑедÑдÑÑего пÑимеÑа: | |
<source lang="kpp"> | <source lang="kpp"> | ||
Строка 35: | Строка 35: | ||
</source> | </source> | ||
− | == | + | == ÐпеÑаÑоÑÑ Ð¿ÑÐ¸Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ñипов == |
− | + | ЧаÑÑо бÑÐ²Ð°ÐµÑ Ñак, ÑÑо одни и Ñе же обÑекÑÑ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð¿ÑедÑÑÐ°Ð²Ð»ÐµÐ½Ñ ÑазлиÑнÑми ÑпоÑобами. ÐапÑимеÑ, ÑиÑло 5 Ð¼Ð¾Ð¶ÐµÑ | |
− | + | бÑÑÑ Ð¿ÑедÑÑавлено как ÑелоÑиÑленное 5, веÑеÑÑвенное 5.0 или в виде ÑÑÑоки "5". | |
− | + | ÐпеÑаÑоÑÑ Ð¿ÑÐ¸Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ñипов позволÑÑÑ Ð¿ÑеобÑазовÑваÑÑ Ð¾Ð±ÑекÑÑ Ð¸Ð· одниÑ
клаÑÑов в дÑÑгие. | |
− | + | ÐÐ¼Ñ Ñакого опеÑаÑоÑа ÑÐ¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ клаÑÑа, в коÑоÑÑй пÑоизводиÑÑÑ Ð¿ÑеобÑазование; опеÑаÑÐ¾Ñ Ð½Ðµ пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ | |
− | + | паÑамеÑÑов и не должен менÑÑÑ ÑекÑÑий обÑекÑ. | |
− | + | ÐÑи обÑÑвлении опеÑаÑоÑа пÑÐ¸Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ñипа, Ñип ÑезÑлÑÑаÑа ÑÑнкÑии ÑказÑваÑÑ Ð½Ðµ ÑледÑеÑ. | |
− | + | ÐÑодолжим пÑÐ¸Ð¼ÐµÑ Ñ Ð´Ð²ÑмеÑнÑм векÑоÑом. РнекоÑоÑÑÑ
задаÑаÑ
бÑÐ²Ð°ÐµÑ ÑелеÑообÑазно опÑеделиÑÑ Ð¿ÑеобÑазование векÑоÑа | |
− | + | в веÑеÑÑвенное ÑиÑло, возвÑаÑаÑÑее Ð´Ð»Ð¸Ð½Ñ Ð²ÐµÐºÑоÑа. | |
− | + | ÐÑо можно ÑделаÑÑ ÑледÑÑÑим обÑазом: | |
<source lang="kpp"> | <source lang="kpp"> | ||
Строка 57: | Строка 57: | ||
} | } | ||
− | // | + | // Ркоде: |
var v = Vector2.create(3.0, 4.0); | var v = Vector2.create(3.0, 4.0); | ||
var len = v as real; // => 5.0 | var len = v as real; // => 5.0 | ||
Строка 63: | Строка 63: | ||
− | == | + | == ÐпеÑаÑÐ¾Ñ Ð¸Ð½Ð´ÐµÐºÑного доÑÑÑпа == |
− | + | СÑÑеÑÑвÑÐµÑ Ð´Ð²Ð° опеÑаÑоÑа - <tt>[]</tt> и <tt>[]=</tt> - опеÑаÑÐ¾Ñ Ð¸Ð½Ð´ÐµÐºÑного ÑÑÐµÐ½Ð¸Ñ Ð¸ опеÑаÑÐ¾Ñ Ð¸Ð½Ð´ÐµÐºÑной запиÑи. | |
− | + | ÐпеÑаÑÐ¾Ñ Ð¸Ð½Ð´ÐµÐºÑного ÑÑÐµÐ½Ð¸Ñ Ð¿ÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð½Ðµ менее одного паÑамеÑÑа (возможно более одного), не менÑÐµÑ Ð¾Ð±ÑÐµÐºÑ Ð¸ паÑамеÑÑÑ | |
− | + | и должен возвÑаÑаÑÑ Ð·Ð½Ð°Ñение - знаÑение ÑлеменÑа по ÑказаннÑм индекÑам. | |
− | + | ÐпеÑаÑÐ¾Ñ Ð¸Ð½Ð´ÐµÐºÑной запиÑи пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð½Ðµ менее двÑÑ
паÑамеÑÑов. ÐоÑледний паÑамеÑÑ Ð²Ñегда ÑооÑвеÑÑÑвÑÐµÑ Ð·Ð½Ð°ÑениÑ, коÑоÑое | |
− | + | должно бÑÑÑ Ð·Ð°Ð¿Ð¸Ñано. ÐпеÑаÑÐ¾Ñ Ð¸Ð·Ð¼ÐµÐ½ÑÐµÑ Ð¾Ð±ÑекÑ, но не изменÑÐµÑ Ñвои паÑамеÑÑÑ. | |
− | + | ÐÐ»Ñ Ð´Ð²ÑмеÑного векÑоÑа Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑдобнÑм пÑоиндекÑиÑоваÑÑ ÐºÐ¾Ð¾ÑдинаÑÑ. Ð ÑÑом ÑлÑÑае можно опÑеделиÑÑ ÑледÑÑÑие опеÑаÑоÑÑ: | |
<source lang="kpp"> | <source lang="kpp"> | ||
Строка 94: | Строка 94: | ||
} | } | ||
− | // | + | // Ркоде: |
var v = Vector2.create(0, 0); | var v = Vector2.create(0, 0); | ||
v[1] = 5; // => (0, 5) | v[1] = 5; // => (0, 5) | ||
Строка 101: | Строка 101: | ||
− | == | + | == ÐпеÑаÑÐ¾Ñ Ð²Ñзова ÑÑнкÑии == |
− | + | СпеÑиалÑнÑй опеÑаÑÐ¾Ñ <tt>call</tt> иÑполÑзÑеÑÑÑ Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð¾Ð±ÑÐµÐºÑ Ð¼Ð¾Ð¶Ð½Ð¾ бÑло Ð±Ñ Ð¸ÑполÑзоваÑÑ ÐºÐ°Ðº ÑÑнкÑиÑ. | |
− | + | ÐÐµÑ Ð½Ð¸ÐºÐ°ÐºÐ¸Ñ
огÑаниÑений на паÑамеÑÑÑ Ð¸ поведение ÑÑого опеÑаÑоÑа. | |
− | + | ÐÑимеÑ: | |
<source lang="kpp"> | <source lang="kpp"> | ||
Строка 116: | Строка 116: | ||
} | } | ||
− | // | + | // ÐÑполÑзование: |
var greeting = new GreetingPrinter; | var greeting = new GreetingPrinter; | ||
− | greeting("Peter"); // | + | greeting("Peter"); // вÑÐ²ÐµÐ´ÐµÑ "Hello, Peter!" |
function f(const b) | function f(const b) | ||
Строка 125: | Строка 125: | ||
} | } | ||
− | f() { |x| puts("Hi, #{x}!"); }; // | + | f() { |x| puts("Hi, #{x}!"); }; // вÑÐ²ÐµÐ´ÐµÑ "Hi, Vova!" |
− | f(new GreetingPrinter); // | + | f(new GreetingPrinter); // вÑÐ²ÐµÐ´ÐµÑ "Hello, Vova!" |
</source> | </source> |
Версия 04:40, 28 февраля 2012
ÐпеÑаÑоÑÑ Ð¾ÑлиÑаÑÑÑÑ Ð¾Ñ Ð¾Ð±ÑÑнÑÑ ÑÑнкÑий Ñем, ÑÑо имеÑÑ Ð¾Ð¿ÑеделеннÑе огÑаниÑÐµÐ½Ð¸Ñ Ð¿Ð¾ колиÑеÑÑÐ²Ñ Ð°ÑгÑменÑов, а Ñакже некоÑоÑое ожидаемое поведение. ÐапÑимеÑ, опеÑаÑÐ¾Ñ + (Ñложение), пÑинимаÑÑий более Ñем один аÑгÑменÑ, вÑглÑдел Ð±Ñ Ð³Ð»Ñпо. ÐÑоме Ñого, вÑÑд ли кÑо-Ñо Ð¶Ð´ÐµÑ Ð¾Ñ Ð¾Ð¿ÐµÑаÑоÑа ÑÐ»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ðµ обÑекÑа, Ð´Ð»Ñ ÐºÐ¾ÑоÑого он вÑзван, или аÑгÑменÑа.
РаÑÑмоÑÑим ÑазлиÑнÑе ÑÐ¸Ð¿Ñ Ð¾Ð¿ÐµÑаÑоÑов более подÑобно.
i5ZE1g <a href="http://qmlunrxnlfad.com/">qmlunrxnlfad</a>, [url=http://secdzqkuvdic.com/]secdzqkuvdic[/url], [link=http://wniuyjxuhboe.com/]wniuyjxuhboe[/link], http://vldlnwbycabq.com/
Paced World, http://bycksowleb.typepad.com/blog/2012/02/sample-of-spouse-sponsor-letter.html Sample Of Spouse Sponsor Letter, 956, http://zskwfiedx.typepad.com/blog/2012/02/cold-one-apotamkin-legends.html Cold One Apotamkin Legends, rmv, http://zvnmdbuo.typepad.com/blog/2012/02/crafts-lighted-tree-topper.html Crafts Lighted Tree Topper, >:-(, http://xqsktzeu.typepad.com/blog/2012/02/itunes-linux-decrypt.html Itunes Linux Decrypt, ajofz, http://mjmtkssjb.typepad.com/blog/2012/02/itunes-not-working-quicktime-problem.html Itunes Not Working Quicktime Problem, 8-DDD, http://jrtauoglom.typepad.com/blog/2012/02/itunes-lyrics-use.html Itunes Lyrics Use, >:-[[[, http://bbjwxwyn.typepad.com/blog/2012/02/contoh-cerita-narasi.html Contoh Cerita Narasi, 935946, http://hjmfhbnpbo.typepad.com/blog/2012/02/glasgow-german-market.html Glasgow German Market, =-D, http://milhvmweq.typepad.com/blog/2012/02/apple-itunes-contact-details.html Apple Itunes Contact Details, 872, http://puygejkfq.typepad.com/blog/2012/02/sites-like-ifeelmyself.html Sites Like Ifeelmyself, 940, http://iymdsyjk.typepad.com/blog/2012/02/itunes-sync-not-starting.html Itunes Sync Not Starting, whg, http://ddbstzyilr.typepad.com/blog/2012/02/itunes-sync-quality.html Itunes Sync Quality, :O, http://ifslqtcngu.typepad.com/blog/2012/02/itunes-movie-trailers-black-swan.html Itunes Movie Trailers Black Swan, %-OOO, http://jhdgkivn.typepad.com/blog/2012/02/itunes-download-bitrate.html Itunes Download Bitrate, wjo, http://gqylodwqd.typepad.com/blog/2012/02/pictures-of-safety-rules.html Pictures Of Safety Rules, nwan, http://efaplseg.typepad.com/blog/2012/02/bypass-facebook-at-work.html Bypass Facebook At Work, ejgpe, http://beerdywfp.typepad.com/blog/2012/02/how-to-make-a-spun-cotton-ornament.html How To Make A Spun Cotton Ornament, mljwpx, http://symvdmvz.typepad.com/blog/2012/02/married-cops-do.html Married Cops Do, >:[[[, http://whzoyosxz.typepad.com/blog/2012/02/acai-capsules-fake.html Acai Capsules Fake, sru, http://qqxljsydii.typepad.com/blog/2012/02/snowman-plywood-cut-outs.html Snowman Plywood Cut Outs, 8[[,
Содержание |
ÐпеÑаÑоÑÑ Ð¿ÑиÑваиваниÑ
ÐпеÑаÑÐ¾Ñ Ð¿ÑиÑÐ²Ð°Ð¸Ð²Ð°Ð½Ð¸Ñ = - ÑÑо опеÑаÑоÑ, коÑоÑÑй копиÑÑÐµÑ Ð·Ð½Ð°Ñение Ñвоего аÑгÑменÑа в ÑекÑÑий обÑекÑ.
ÐÑоме Ñого, ÐºÐ°Ð¶Ð´Ð¾Ð¼Ñ Ð°ÑиÑмеÑиÑеÑÐºÐ¾Ð¼Ñ Ð¾Ð¿ÐµÑаÑоÑÑ ÑооÑвеÑÑÑвÑÐµÑ Ð¾Ð¿ÐµÑаÑÐ¾Ñ Ð¿ÑиÑваиваниÑ, Ð¸Ð¼Ñ ÐºÐ¾ÑоÑого ÑоÑÑавлÑеÑÑÑ Ð¸Ð· имени маÑемаÑиÑеÑкого опеÑаÑоÑа плÑÑ Ñимвол "=" (напÑимеÑ, +=). Такие опеÑаÑоÑÑ Ð´ÐµÐ»Ð°ÑÑ ÑооÑвеÑÑÑвÑÑÑее маÑемаÑиÑеÑкое дейÑÑвие Ñ ÑекÑÑим обÑекÑом.
ÐпеÑаÑоÑÑ Ð¿ÑиÑÐ²Ð°Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÑÑÑ ÑекÑÑий обÑекÑ, но не изменÑÑÑ Ð°ÑгÑменÑ. ÐÑе они, кÑоме ~=, --= и ++=, пÑинимаÑÑ Ñовно один аÑгÑменÑ.
ÐпеÑаÑоÑÑ Ð¿ÑиÑÐ²Ð°Ð¸Ð²Ð°Ð½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²Ð¾Ð·Ð²ÑаÑаÑÑ ÑекÑÑий обÑÐµÐºÑ Ð² каÑеÑÑве ÑезÑлÑÑаÑа.
ÐпеÑаÑоÑÑ --= и ++= ÑооÑвеÑÑÑвÑÑÑ Ð¿ÑеÑикÑÐ½Ð¾Ð¼Ñ Ð¸Ð½ÐºÑеменÑÑ Ð¸ декÑеменÑÑ.
ÐÐ»Ñ Ñого же клаÑÑа Vector2 из пÑедÑдÑÑего пÑимеÑа:
<source lang="kpp"> operator Vector2 += (const Vector2 arg) {
x += arg.x; y += arg.y; return this;
} </source>
ÐпеÑаÑоÑÑ Ð¿ÑÐ¸Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ñипов
ЧаÑÑо бÑÐ²Ð°ÐµÑ Ñак, ÑÑо одни и Ñе же обÑекÑÑ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð¿ÑедÑÑÐ°Ð²Ð»ÐµÐ½Ñ ÑазлиÑнÑми ÑпоÑобами. ÐапÑимеÑ, ÑиÑло 5 Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÑедÑÑавлено как ÑелоÑиÑленное 5, веÑеÑÑвенное 5.0 или в виде ÑÑÑоки "5".
ÐпеÑаÑоÑÑ Ð¿ÑÐ¸Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ñипов позволÑÑÑ Ð¿ÑеобÑазовÑваÑÑ Ð¾Ð±ÑекÑÑ Ð¸Ð· Ð¾Ð´Ð½Ð¸Ñ ÐºÐ»Ð°ÑÑов в дÑÑгие.
ÐÐ¼Ñ Ñакого опеÑаÑоÑа ÑÐ¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ клаÑÑа, в коÑоÑÑй пÑоизводиÑÑÑ Ð¿ÑеобÑазование; опеÑаÑÐ¾Ñ Ð½Ðµ пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð¿Ð°ÑамеÑÑов и не должен менÑÑÑ ÑекÑÑий обÑекÑ.
ÐÑи обÑÑвлении опеÑаÑоÑа пÑÐ¸Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ñипа, Ñип ÑезÑлÑÑаÑа ÑÑнкÑии ÑказÑваÑÑ Ð½Ðµ ÑледÑеÑ.
ÐÑодолжим пÑÐ¸Ð¼ÐµÑ Ñ Ð´Ð²ÑмеÑнÑм векÑоÑом. РнекоÑоÑÑÑ Ð·Ð°Ð´Ð°ÑÐ°Ñ Ð±ÑÐ²Ð°ÐµÑ ÑелеÑообÑазно опÑеделиÑÑ Ð¿ÑеобÑазование векÑоÑа в веÑеÑÑвенное ÑиÑло, возвÑаÑаÑÑее Ð´Ð»Ð¸Ð½Ñ Ð²ÐµÐºÑоÑа. ÐÑо можно ÑделаÑÑ ÑледÑÑÑим обÑазом:
<source lang="kpp">
const operator real () { return sqrt( x * x + y * y ); }
// Ркоде: var v = Vector2.create(3.0, 4.0); var len = v as real; // => 5.0 </source>
ÐпеÑаÑÐ¾Ñ Ð¸Ð½Ð´ÐµÐºÑного доÑÑÑпа
СÑÑеÑÑвÑÐµÑ Ð´Ð²Ð° опеÑаÑоÑа - [] и []= - опеÑаÑÐ¾Ñ Ð¸Ð½Ð´ÐµÐºÑного ÑÑÐµÐ½Ð¸Ñ Ð¸ опеÑаÑÐ¾Ñ Ð¸Ð½Ð´ÐµÐºÑной запиÑи.
ÐпеÑаÑÐ¾Ñ Ð¸Ð½Ð´ÐµÐºÑного ÑÑÐµÐ½Ð¸Ñ Ð¿ÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð½Ðµ менее одного паÑамеÑÑа (возможно более одного), не менÑÐµÑ Ð¾Ð±ÑÐµÐºÑ Ð¸ паÑамеÑÑÑ Ð¸ должен возвÑаÑаÑÑ Ð·Ð½Ð°Ñение - знаÑение ÑлеменÑа по ÑказаннÑм индекÑам.
ÐпеÑаÑÐ¾Ñ Ð¸Ð½Ð´ÐµÐºÑной запиÑи пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð½Ðµ менее двÑÑ Ð¿Ð°ÑамеÑÑов. ÐоÑледний паÑамеÑÑ Ð²Ñегда ÑооÑвеÑÑÑвÑÐµÑ Ð·Ð½Ð°ÑениÑ, коÑоÑое должно бÑÑÑ Ð·Ð°Ð¿Ð¸Ñано. ÐпеÑаÑÐ¾Ñ Ð¸Ð·Ð¼ÐµÐ½ÑÐµÑ Ð¾Ð±ÑекÑ, но не изменÑÐµÑ Ñвои паÑамеÑÑÑ.
ÐÐ»Ñ Ð´Ð²ÑмеÑного векÑоÑа Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑдобнÑм пÑоиндекÑиÑоваÑÑ ÐºÐ¾Ð¾ÑдинаÑÑ. Ð ÑÑом ÑлÑÑае можно опÑеделиÑÑ ÑледÑÑÑие опеÑаÑоÑÑ:
<source lang="kpp">
const operator real [] (const int idx) { switch(idx) { case 0: return x; case 1: return y; default: throw ERangeError.create('index is out of range'); } }
const operator Vector2 []= (const int idx, const real value) { switch(idx) { case 0: x = value; case 1: y = value; default: throw ERangeError.create('index is out of range'); } }
// Ркоде: var v = Vector2.create(0, 0); v[1] = 5; // => (0, 5) var r = v[0]; // => 0 </source>
ÐпеÑаÑÐ¾Ñ Ð²Ñзова ÑÑнкÑии
СпеÑиалÑнÑй опеÑаÑÐ¾Ñ call иÑполÑзÑеÑÑÑ Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð¾Ð±ÑÐµÐºÑ Ð¼Ð¾Ð¶Ð½Ð¾ бÑло Ð±Ñ Ð¸ÑполÑзоваÑÑ ÐºÐ°Ðº ÑÑнкÑиÑ. ÐÐµÑ Ð½Ð¸ÐºÐ°ÐºÐ¸Ñ Ð¾Ð³ÑаниÑений на паÑамеÑÑÑ Ð¸ поведение ÑÑого опеÑаÑоÑа.
ÐÑимеÑ:
<source lang="kpp"> class GreetingPrinter {
public operator call (const string who) { puts("Hello, #{who}!"); }
}
// ÐÑполÑзование: var greeting = new GreetingPrinter; greeting("Peter"); // вÑÐ²ÐµÐ´ÐµÑ "Hello, Peter!"
function f(const b) {
b("Vova");
}
f() { |x| puts("Hi, #{x}!"); }; // вÑÐ²ÐµÐ´ÐµÑ "Hi, Vova!" f(new GreetingPrinter); // вÑÐ²ÐµÐ´ÐµÑ "Hello, Vova!" </source>