{"id":3434,"date":"2024-08-05T08:17:00","date_gmt":"2024-08-04T23:17:00","guid":{"rendered":"http:\/\/43.203.250.216\/?p=3434"},"modified":"2024-08-04T17:18:51","modified_gmt":"2024-08-04T08:18:51","slug":"c%ec%97%90%ec%84%9c-%ec%98%a4%eb%b2%84%eb%9d%bc%ec%9d%b4%eb%93%9c%eb%90%9c-%ed%95%a8%ec%88%98%ea%b0%80-%ec%95%88%eb%b6%88%eb%9f%ac%ec%a0%b8%ec%9a%94","status":"publish","type":"post","link":"https:\/\/litcoder.com\/?p=3434","title":{"rendered":"C++\uc5d0\uc11c \uc624\ubc84\ub77c\uc774\ub4dc\ub41c \ud568\uc218\uac00 \uc548\ubd88\ub7ec\uc838\uc694"},"content":{"rendered":"\n<p>Data\ub77c\uace0 \ud558\ub294 \uc815\ubcf4\ub97c \uc800\uc7a5\ud558\ub294 \ud074\ub798\uc2a4\ub4e4\uc758 \uae30\ucd08 \ud074\ub798\uc2a4\uac00 \uc788\ub2e4\uace0 \ud574\ubcf4\uc790. Data\uc758 type\uc5d0 \ub530\ub77c \ub85c\ub529 \ud558\ub294 \ubc29\ubc95\uc774 \uc11c\ub85c \ub2ec\ub77c\uc9c0\uae30 \ub54c\ubb38\uc5d0 loadData()\ub77c\uace0 \ud558\ub294 \uac00\uc0c1\ud568\uc218\ub97c \ud558\ub098 \uc815\uc758\ud574 \ub450\uace0, \uc0c1\uc18d\ubc1b\ub294 \ud074\ub798\uc2a4\ub4e4\uc740 \uc790\uae30\uac00 loading\ud558\ub294 \ubc29\ubc95\uc744 \uc815\uc758\ud558\ub3c4\ub85d \uad6c\uc131\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"cpp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"9\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class Data {\npublic:\n  Data(int v) { loadData(v); }\n  void dispValue() { cout &lt;&lt; \"Value is \" &lt;&lt; _val &lt;&lt; endl; }\n\nprotected:\n  \/\/ \uc0c1\uc18d\ubc1b\ub294 \ud074\ub798\uc2a4\uc5d0\uc11c \uad6c\ud604\ud574\uc57c \ud568.\n  \/\/ \ud638\ucd9c\ub418\uba74 \uc548\ub428.\n  virtual bool loadData(int v) {\n    cout &lt;&lt; \"Default loader, do not call me!\" &lt;&lt; endl;\n    return false;\n  }\n  int _val = 0;\n};<\/pre>\n\n\n\n<p>Data\uc5d0\uc11c \uc0c1\uc18d\ubc1b\ub294 DerivedData \ud074\ub798\uc2a4\ub294 \uc790\uae30 \ubc84\uc804\uc758 loadData()\ub97c \uc624\ubc84\ub77c\uc774\ub4dc\ud574\uc11c \uad6c\ud604\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"cpp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"6\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class DerivedData : public Data {\npublic:\n  DerivedData(int v) : Data(v) {}\n\nprotected:\n  bool loadData(int v) override {\n    cout &lt;&lt; \"DerivedData1::loadData()\" &lt;&lt; endl;\n    _val = v;\n    return true;\n  }\n};<\/pre>\n\n\n\n<p>DerivedData\ub97c \uc0dd\uc131\ud558\uace0 100\uc73c\ub85c \ucd08\uae30\ud654\ud574\uc11c \uacb0\uacfc\ub97c \ubcf4\uc5ec\uc8fc\ub3c4\ub85d main()\uc744 \uc791\uc131\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"cpp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">int main(void) {\n  auto d = DerivedData(100);\n  d.dispValue();\n}<\/pre>\n\n\n\n<p>\uc774\uc81c \ucef4\ud30c\uc77c\ud558\uace0 \uc2e4\ud589\ud574\ubcf4\uc790.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"dracula\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ g++ .\/main.cpp \n$ .\/a.out \nDefault loader, do not call me!\nValue is 0<\/pre>\n\n\n\n<p>\uc608\uc0c1\uacfc \ub2ec\ub9ac DerivedData\uc758 loadData()\uac00 \uc544\ub2cc Data\uc758 loadData()\uac00 \ubd88\ub9ac\uace0 \uc788\ub2e4. \ubd84\uba85\ud788 DevriedData\uc758 \uc778\uc2a4\ud134\uc2a4\ub97c \ub9cc\ub4e4\uc5c8\ub294\ub370\ub3c4 \uc624\ubc84\ub77c\uc774\ub4dc\ud55c \uba64\ubc84\ud568\uc218\uac00 \ub3d9\uc791\ud558\uc9c0 \uc54a\ub294 \uc774\uc720\ub294 \ubb34\uc5c7\uc77c\uae4c?<\/p>\n\n\n\n<p>\uc774 \uc608\uc81c\uc5d0\uc11c\ub294 Data\uc5d0\uc11c \uc0c1\uc18d \ubc1b\uc740 DerivedData \ud074\ub798\uc2a4\uc758 \uc0dd\uc131\uc790\uac00 \ud638\ucd9c\ub418\uae30 \uc804\uc5d0 Data\uc758 \uc0dd\uc131\uc790\uac00 \uba3c\uc800 \ud638\ucd9c\ub41c\ub2e4. Data\ud074\ub798\uc2a4\uc758 \uc0dd\uc131\uc790\uc5d0\uc11c\ub294 \uac00\uc0c1\ud568\uc218\ub85c \uc815\uc758\ub41c loadData()\uc758 \uc624\ubc84\ub77c\uc774\ub4dc \uad6c\uc870\ub97c \ub530\ub77c \ub0b4\ub824\uac00\uc9c0 \uc54a\uace0 \ud604\uc7ac \ud074\ub798\uc2a4\uc778 Data\uc5d0 \uc815\uc758\ub418\uc5b4 \uc788\ub294 loadData() \ub97c \ubc14\uc778\ub529\ud55c\ub2e4. \uc544\uc9c1 DerrivedData \ud074\ub798\uc2a4\uac00 \ucd08\uae30\ud654 \ub418\uc9c0 \uc54a\uc740 \uc2dc\uc810\uc774\uae30 \ub54c\ubb38\uc5d0 \uae30\ucd08 \ud074\ub798\uc2a4\uc758 \uc0dd\uc131\uc790\uc5d0\uc11c \ud30c\uc0dd \ud074\ub798\uc2a4\uc758 \uc624\ubc84\ub77c\uc774\ub4dc \uba64\ubc84\ub97c \ubc14\uc778\ub529\ud558\ub294 \uac83\uc740 \uc544\uc9c1 \uc54c\uc9c0 \ubabb\ud558\ub294 \uc815\ubcf4\ub97c \ucc38\uc870\ud574\uc57c \ud558\ub294 \uc77c\uc774\ub418\uae30 \ub54c\ubb38\uc774\ub2e4.<\/p>\n\n\n\n<p>Scott Meyers\uc758 \uba85\uc11c\uc778 Effective C++\uc5d0\uc11c\ub3c4 \uc774 \ub0b4\uc6a9\uc744 \uc5b8\uae09\ud558\uace0 \uc788\uc5c8\ub2e4. &#8220;Item 9: Never call virtual functions during construction or destruction&#8221;(\uc0dd\uc131\uc790\ub098 \uc18c\uba78\uc790\uc5d0\uc11c \uac00\uc0c1\ud568\uc218\ub97c \uc808\ub300 \ud638\ucd9c\ud558\uc9c0 \ub9d0\uac83) \uc544\ub9c8\ub3c4 \ub2e4\uc2dc \uc815\ub3c5\ud560 \ub54c\uac00 \ub410\ub098 \ubcf4\ub2e4.<\/p>\n\n\n\n<p>\ud574\uacb0\ucc45\uc73c\ub85c \uc81c\uc2dc\ub418\ub294 \uac83\uc740 \uac00\uc0c1 \ud568\uc218\ub97c \ubd80\ub974\ub294 \ub300\uc2e0 \uad00\ub828\ud55c \uc815\ubcf4\ub97c \ud30c\ub77c\ubbf8\ud130\ub85c \ubc1b\uc544\uc11c \ucc98\ub9ac\ud558\ub294 \uac83\uc774\ub2e4. \uc704\uc758 \uacbd\uc6b0 \uc608\ub97c \ub4e4\uba74 loadData()\ub97c \uc77c\ubc18 \uba64\ubc84\ud568\uc218\ub85c \uc791\uc131\ud558\uace0 DataLoader\ub97c \ud30c\ub77c\ubbf8\ud130\ub85c \ub118\uaca8\uc8fc\ub294 \ubc29\ubc95\uc744 \uace0\ub824\ud574 \ubcfc\uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"cpp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"true\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#include &lt;iostream>\nusing namespace std;\n\nclass DataLoader {\npublic:\n  DataLoader(int v) { _val = v; }\n  int getValue() { return _val; }\n\nprivate:\n  int _val;\n};\n\nclass Data {\npublic:\n  Data(DataLoader &amp;ldr) { loadData(ldr); }\n  void dispValue() { cout &lt;&lt; \"Value is \" &lt;&lt; _val &lt;&lt; endl; }\n\nprotected:\n  bool loadData(DataLoader &amp;ldr) {\n    cout &lt;&lt; \"Load data \" &lt;&lt; ldr.getValue() &lt;&lt; endl;\n    _val = ldr.getValue();\n    return true;\n  }\n  int _val = 0;\n};\n\nclass DerivedData : public Data {\npublic:\n  DerivedData(DataLoader &amp;ldr) : Data(ldr) {}\n};\n\nint main(void) {\n  auto l = DataLoader(100);\n  auto d = DerivedData(l);\n  d.dispValue();\n}<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"dracula\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$ .\/a.out \nLoad data 100\nValue is 100\n<\/pre>\n\n\n\n<p> <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Data\ub77c\uace0 \ud558\ub294 \uc815\ubcf4\ub97c \uc800\uc7a5\ud558\ub294 \ud074\ub798\uc2a4\ub4e4\uc758 \uae30\ucd08 \ud074\ub798\uc2a4\uac00 \uc788\ub2e4\uace0 \ud574\ubcf4\uc790. Data\uc758 type\uc5d0 \ub530\ub77c \ub85c\ub529 \ud558\ub294 \ubc29\ubc95\uc774 \uc11c\ub85c \ub2ec\ub77c\uc9c0\uae30 \ub54c\ubb38\uc5d0 loadData()\ub77c\uace0 \ud558\ub294 \uac00\uc0c1\ud568\uc218\ub97c \ud558\ub098 \uc815\uc758\ud574 \ub450\uace0, \uc0c1\uc18d\ubc1b\ub294 \ud074\ub798\uc2a4\ub4e4\uc740 \uc790\uae30\uac00 loading\ud558\ub294 \ubc29\ubc95\uc744 \uc815\uc758\ud558\ub3c4\ub85d \uad6c\uc131\ud55c\ub2e4. Data\uc5d0\uc11c \uc0c1\uc18d\ubc1b\ub294 DerivedData \ud074\ub798\uc2a4\ub294 \uc790\uae30 \ubc84\uc804\uc758 loadData()\ub97c \uc624\ubc84\ub77c\uc774\ub4dc\ud574\uc11c \uad6c\ud604\ud55c\ub2e4. DerivedData\ub97c \uc0dd\uc131\ud558\uace0 100\uc73c\ub85c \ucd08\uae30\ud654\ud574\uc11c \uacb0\uacfc\ub97c \ubcf4\uc5ec\uc8fc\ub3c4\ub85d main()\uc744 \uc791\uc131\ud55c\ub2e4. \uc774\uc81c \ucef4\ud30c\uc77c\ud558\uace0 \uc2e4\ud589\ud574\ubcf4\uc790. \uc608\uc0c1\uacfc \ub2ec\ub9ac DerivedData\uc758 loadData()\uac00 [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[5],"tags":[247,324,325,323],"class_list":["post-3434","post","type-post","status-publish","format-standard","hentry","category-programming","tag-c","tag-constructor","tag-destructor","tag-overriding"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/litcoder.com\/index.php?rest_route=\/wp\/v2\/posts\/3434","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/litcoder.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/litcoder.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/litcoder.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/litcoder.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3434"}],"version-history":[{"count":13,"href":"https:\/\/litcoder.com\/index.php?rest_route=\/wp\/v2\/posts\/3434\/revisions"}],"predecessor-version":[{"id":3454,"href":"https:\/\/litcoder.com\/index.php?rest_route=\/wp\/v2\/posts\/3434\/revisions\/3454"}],"wp:attachment":[{"href":"https:\/\/litcoder.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3434"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/litcoder.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3434"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/litcoder.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3434"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}