{"id":1783,"date":"2020-04-08T19:31:34","date_gmt":"2020-04-08T19:31:34","guid":{"rendered":"https:\/\/yazilimperver.com\/?p=1783"},"modified":"2020-04-08T19:31:53","modified_gmt":"2020-04-08T19:31:53","slug":"haftalik-c-26-donusturucu-yapicilar","status":"publish","type":"post","link":"https:\/\/yazilimperver.com\/index.php\/2020\/04\/08\/haftalik-c-26-donusturucu-yapicilar\/","title":{"rendered":"[:tr]Haftal\u0131k C++ 27 &#8211; D\u00f6n\u00fc\u015ft\u00fcr\u00fcc\u00fc Yap\u0131c\u0131lar[:]"},"content":{"rendered":"<p>[:tr]Bir ka\u00e7 g\u00fcn \u00f6nce C++ 11 ile gelen yeni <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/yazilimperver.com\/index.php\/kodlar\/\">kabiliyetlere ili\u015fkin yazd\u0131\u011f\u0131m yaz\u0131lara<\/a><\/strong><\/span> bakarken, bir tak\u0131m \u00f6zelliklere de\u011finmedi\u011fimi fark ettim. Bu yaz\u0131mda, bunlardan birisine \u00e7ok h\u0131zl\u0131 bir \u015fekilde g\u00f6z ataca\u011f\u0131z: &#8220;<em>Converting Constructors<\/em>&#8221; ya da d\u00f6n\u00fc\u015ft\u00fcr\u00fcc\u00fc yap\u0131c\u0131lar.<\/p>\n<p>C++ 11&#8217;den \u00f6nce, sadece tek parametre alan ve &#8220;<em>explicit<\/em>&#8221; anahtar kelimesi belirtilmemi\u015f s\u0131n\u0131f yap\u0131c\u0131lar\u0131, bu \u015fekilde d\u00f6n\u00fc\u015ft\u00fcr\u00fcc\u00fc yap\u0131c\u0131 olarak kullan\u0131labiliyordu. Fakat, C++ 11 ile gelen ortak ilklendirme kabiliyeti &#8220;<em>Uniform Initialization&#8221;<\/em> ile birlikte, bu k\u0131s\u0131tlama kalk\u0131yor ve art\u0131k birden fazla parametre alan ve &#8220;<em>explicit<\/em>&#8221; anahtar kelimesini almam\u0131\u015f yap\u0131c\u0131lar da, benzer \u015fekilde kullan\u0131labilecek.<br \/>\nBurada daha fazla ilerlemeden \u00f6nce, bu \u015fekilde yani &#8220;<em>implicit<\/em>&#8221; \u015fekilde d\u00f6n\u00fc\u015ft\u00fcrme i\u015flemleri her zaman istenen bir durum olmuyor ve bunun \u00f6zellikle istenmedi\u011fini, sadece verilen tipte parametre verilmesini istedi\u011finiz durumda &#8220;<em>explicit<\/em>&#8221; anahtar kelimesini eklemeniz gerekmekte.<\/p>\n<p>\u015eimdi gelelim bu kabiliyetin kullan\u0131m\u0131na g\u00fczel bir \u00f6rnek \u00fczerinden ge\u00e7meye. Kafan\u0131zdaki b\u00fct\u00fcn sorular\u0131 cevaplayaca\u011f\u0131n\u0131 d\u00fc\u015f\u00fcn\u00fcyorum \ud83d\ude42<\/p>\n<pre class=\"lang:c++ decode:true \">struct A\r\n{\r\n    \/\/ D\u00f6n\u00fc\u015ft\u00fcr\u00fcc\u00fc yapici\r\n    A(int) {} \r\n    \r\n    \/\/ C++ 11 ile birlikte d\u00f6n\u00fc\u015ft\u00fcr\u00fcc\u00fc yapici\r\n    A(int, int) {} \r\n};\r\n \r\nstruct B\r\n{\r\n    \/\/ \u00d6zellikle d\u00f6n\u00fc\u015ft\u00fcrme i\u015fini istemiyoruz\r\n    explicit B(int) {}\r\n    \r\n    \/\/ \u00d6zellikle d\u00f6n\u00fc\u015ft\u00fcrme i\u015fini istemiyoruz\r\n    \/\/ C++ 11 ile birlikte explicit bu yapiciler ile birlikte kullan\u0131labilmeye baslandi. \r\n    \/\/ Onceden zaten b\u0131rden fazla parametre \u0131c\u0131n donusturucu yap\u0131c\u0131 durumu olmuyordu\r\n    explicit B(int, int) {}\r\n};\r\n \r\nint main()\r\n{\r\n    A a1 = 1;     \/\/ OK: kopyalanarak ilklendirme A::A(int)  y\u0131 se\u00e7er\r\n    A a2(2);      \/\/ OK: direk ilklendirme A::A(int) y\u0131 se\u00e7er\r\n    A a3 {4,5};   \/\/ OK: direk ortak ilklendirme (uniform initialization) A::A(int, int) y\u0131 se\u00e7er\r\n    A a4 = {4,5}; \/\/ OK: kopya ortak ilklendirme (uniform initialization) A::A(int, int) y\u0131 se\u00e7er\r\n    A a5 = (A)1;  \/\/ OK: a\u00e7\u0131k d\u00f6n\u00fc\u015ft\u00fcrme yap\u0131l\u0131r (static_cast), direk ilklendirme\r\n \r\n\/\/  B b1 = 1;     \/\/ Hata: kopyalanarak ilklendirme explicit ten \u00f6t\u00fcr\u00fc B::B(int) yi se\u00e7mez\r\n    B b2(2);      \/\/ OK: direk ilklendirme B::B(int) yi se\u00e7er. Burada 2.0F olsa yanl\u0131z yine hata al\u0131rd\u0131k ek not ;)\r\n    B b3 {4,5};   \/\/ OK: direk ortak ilklendirme (uniform initialization) B::B(int, int)'y\u0131 se\u00e7er\r\n\/\/  B b4 = {4,5}; \/\/ Hata: kopya ortak ilklendirme yine B::B(int,int)'yi se\u00e7mez\r\n    B b5 = (B)1;  \/\/ OK: a\u00e7\u0131k d\u00f6n\u00fc\u015ft\u00fcrme yap\u0131l\u0131r (static_cast), direk ilklendirme\r\n\r\n    return 0;\r\n}\r\n<\/pre>\n<p>Bu yaz\u0131m\u0131z da bu kadard\u0131 sevgili dostlar, bir sonraki yaz\u0131mda g\u00f6r\u00fc\u015fmek dile\u011fiyle. Bu sefer ger\u00e7ekten k\u0131sa tuttum ama \u00f6yle de\u011fil mi ;)[:]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>[:tr]Bir ka\u00e7 g\u00fcn \u00f6nce C++ 11 ile gelen yeni kabiliyetlere ili\u015fkin yazd\u0131\u011f\u0131m yaz\u0131lara bakarken, bir tak\u0131m \u00f6zelliklere de\u011finmedi\u011fimi fark ettim. Bu yaz\u0131mda, bunlardan birisine \u00e7ok h\u0131zl\u0131 bir \u015fekilde g\u00f6z ataca\u011f\u0131z: &#8220;Converting Constructors&#8221; ya da d\u00f6n\u00fc\u015ft\u00fcr\u00fcc\u00fc yap\u0131c\u0131lar. C++ 11&#8217;den \u00f6nce, sadece tek parametre alan ve &#8220;explicit&#8221; anahtar kelimesi belirtilmemi\u015f s\u0131n\u0131f yap\u0131c\u0131lar\u0131, bu \u015fekilde d\u00f6n\u00fc\u015ft\u00fcr\u00fcc\u00fc yap\u0131c\u0131 olarak&#8230; <a class=\"more-link\" href=\"https:\/\/yazilimperver.com\/index.php\/2020\/04\/08\/haftalik-c-26-donusturucu-yapicilar\/\">Continue reading <span class=\"meta-nav\">&#8594;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":174,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_seopress_titles_title":"","_seopress_titles_desc":"","_seopress_robots_index":"","_seopress_robots_follow":"","_seopress_robots_imageindex":"","_seopress_robots_snippet":"","_seopress_robots_primary_cat":"10","_seopress_robots_breadcrumbs":"","_seopress_robots_freeze_modified_date":"","_seopress_robots_custom_modified_date":"","_seopress_robots_canonical":"","_seopress_social_fb_title":"","_seopress_social_fb_desc":"","_seopress_social_fb_img":"","_seopress_social_fb_img_attachment_id":0,"_seopress_social_fb_img_width":0,"_seopress_social_fb_img_height":0,"_seopress_social_twitter_title":"","_seopress_social_twitter_desc":"","_seopress_social_twitter_img":"","_seopress_social_twitter_img_attachment_id":0,"_seopress_social_twitter_img_width":0,"_seopress_social_twitter_img_height":0,"_seopress_redirections_value":"","_seopress_redirections_enabled":"","_seopress_redirections_enabled_regex":"","_seopress_redirections_logged_status":"","_seopress_redirections_param":"","_seopress_redirections_type":0,"_seopress_analysis_target_kw":"","dsgo_overlay_header":false,"dsgo_overlay_header_text_color":"","dsgo_overlay_skip_top_bar":false,"_designsetgo_exclude_llms":false,"footnotes":""},"categories":[10,41],"tags":[13,46,713,712,714],"class_list":["post-1783","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c","category-modern-c","tag-c","tag-c-11","tag-constructor","tag-converting-constructor","tag-explicit"],"_links":{"self":[{"href":"https:\/\/yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/1783","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/yazilimperver.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/yazilimperver.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/yazilimperver.com\/index.php\/wp-json\/wp\/v2\/comments?post=1783"}],"version-history":[{"count":0,"href":"https:\/\/yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/1783\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/yazilimperver.com\/index.php\/wp-json\/wp\/v2\/media\/174"}],"wp:attachment":[{"href":"https:\/\/yazilimperver.com\/index.php\/wp-json\/wp\/v2\/media?parent=1783"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/yazilimperver.com\/index.php\/wp-json\/wp\/v2\/categories?post=1783"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/yazilimperver.com\/index.php\/wp-json\/wp\/v2\/tags?post=1783"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}