{"id":1814,"date":"2025-03-24T08:49:51","date_gmt":"2025-03-23T23:49:51","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=1814"},"modified":"2025-03-24T08:49:51","modified_gmt":"2025-03-23T23:49:51","slug":"%e3%80%90c%e5%85%a5%e9%96%80%e3%80%91%e7%b6%99%e6%89%bf%e3%81%ae%e4%bd%bf%e3%81%84%e6%96%b9%e5%ae%8c%e5%85%a8%e3%83%9e%e3%82%b9%e3%82%bf%e3%83%bc%ef%bc%81%e5%ae%9f%e8%b7%b5%e3%81%a7%e5%bd%b9","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=1814","title":{"rendered":"\u3010C++\u5165\u9580\u3011\u7d99\u627f\u306e\u4f7f\u3044\u65b9\u5b8c\u5168\u30de\u30b9\u30bf\u30fc\uff01\u5b9f\u8df5\u3067\u5f79\u7acb\u30647\u3064\u306e\u8a2d\u8a08\u30d1\u30bf\u30fc\u30f3"},"content":{"rendered":"\n<div class=\"toc\"><br \/>\n<b>Warning<\/b>:  Undefined array key \"is_admin\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>116<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_category_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>121<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>128<\/b><br \/>\n    <div id=\"toc_container\" class=\"sgb-toc--bullets js-smooth-scroll\" data-dialog-title=\"\u76ee\u6b21\">\n      <p class=\"toc_title\">\u76ee\u6b21 <\/p>\n      <ul class=\"toc_list\">  <li class=\"first\">    <a href=\"#i-0\">C++\u306e\u7d99\u627f\u3068\u306f\uff1f\u521d\u5fc3\u8005\u306b\u3082\u308f\u304b\u308b\u57fa\u790e\u89e3\u8aac<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u306e\u91cd\u8981\u306a\u67f1\u3068\u306a\u308b\u7d99\u627f\u306e\u672c\u8cea<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-2\">\u7d99\u627f\u306b\u3088\u3063\u3066\u5b9f\u73fe\u3067\u304d\u308b3\u3064\u306e\u30e1\u30ea\u30c3\u30c8<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-6\">C++\u306b\u304a\u3051\u308b\u7d99\u627f\u306e\u57fa\u672c\u6587\u6cd5\u3068\u5b9f\u88c5\u65b9\u6cd5<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-7\">public\u3068private\u3068protected\u7d99\u627f\u306e\u9055\u3044\u3068\u4f7f\u3044\u5206\u3051<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-11\">virtual\u30ad\u30fc\u30ef\u30fc\u30c9\u306e\u91cd\u8981\u6027\u3068\u9069\u5207\u306a\u4f7f\u7528\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-15\">\u5b9f\u8df5\u3067\u4f7f\u3048\u308b\u7d99\u627f\u306e\u8a2d\u8a08\u30d1\u30bf\u30fc\u30f3<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-16\">Template Method\u30d1\u30bf\u30fc\u30f3\u306b\u3088\u308b\u5171\u901a\u51e6\u7406\u306e\u62bd\u8c61\u5316<\/a>      <\/li>      <li>        <a href=\"#i-17\">Strategy\u30d1\u30bf\u30fc\u30f3\u3092\u7528\u3044\u305f\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u5207\u308a\u66ff\u3048<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-18\">Bridge\u30d1\u30bf\u30fc\u30f3\u306b\u3088\u308b\u5b9f\u88c5\u306e\u5206\u96e2<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-19\">\u7d99\u627f\u306b\u304a\u3051\u308b\u6ce8\u610f\u70b9\u3068\u4ee3\u66ff\u624b\u6bb5<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-20\">\u591a\u91cd\u7d99\u627f\u304c\u5f15\u304d\u8d77\u3053\u3059\u554f\u984c\u3068\u305d\u306e\u89e3\u6c7a\u7b56<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-24\">\u7d99\u627f\u306e\u4ee3\u308f\u308a\u306b\u30b3\u30f3\u30dd\u30b8\u30b7\u30e7\u30f3\u3092\u4f7f\u3046\u3079\u304d\u5834\u9762<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-27\">\u73fe\u5834\u3067\u6d3b\u304d\u308b\u7d99\u627f\u306e\u5b9f\u8df5\u7684\u306a\u4f7f\u7528\u4f8b<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-28\">GUI\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306b\u304a\u3051\u308b\u7d99\u627f\u306e\u6d3b\u7528<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-29\">\u30b2\u30fc\u30e0\u958b\u767a\u3067\u306e\u7d99\u627f\u3092\u7528\u3044\u305f\u30ad\u30e3\u30e9\u30af\u30bf\u30fc\u8a2d\u8a08<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-30\">\u7d99\u627f\u3092\u7528\u3044\u305f\u30b3\u30fc\u30c9\u306e\u30c6\u30b9\u30c8\u624b\u6cd5<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-31\">\u30e2\u30c3\u30af\u4f5c\u6210\u306b\u304a\u3051\u308b\u7d99\u627f\u306e\u6d3b\u7528\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-32\">\u30c6\u30b9\u30bf\u30d3\u30ea\u30c6\u30a3\u3092\u9ad8\u3081\u308b\u7d99\u627f\u306e\u8a2d\u8a08\u65b9\u91dd<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-33\">\u7d99\u627f\u3092\u4f7f\u3044\u3053\u306a\u3059\u305f\u3081\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-34\">LSP\uff08\u30ea\u30b9\u30b3\u30d5\u306e\u7f6e\u63db\u539f\u5247\uff09\u306b\u57fa\u3065\u304f\u7d99\u627f\u306e\u8a2d\u8a08<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-37\">\u5c06\u6765\u306e\u62e1\u5f35\u6027\u3092\u8003\u616e\u3057\u305f\u7d99\u627f\u968e\u5c64\u306e\u8a2d\u8a08<\/a>      <\/li>    <\/ul>  <\/li><\/ul>\n      <a href=\"#\" class=\"sgb-toc-button js-toc-button\" rel=\"nofollow\" data-open-dialog=\"true\"><i class=\"fa fa-list\"><\/i><span class=\"sgb-toc-button__text\">\u76ee\u6b21\u3078<\/span><\/a>\n    <\/div><\/div><h2 class=\"wp-block-heading\" id=\"i-0\">C++\u306e\u7d99\u627f\u3068\u306f\uff1f\u521d\u5fc3\u8005\u306b\u3082\u308f\u304b\u308b\u57fa\u790e\u89e3\u8aac<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u306e\u91cd\u8981\u306a\u67f1\u3068\u306a\u308b\u7d99\u627f\u306e\u672c\u8cea<\/h3>\n\n\n\n<p>\u7d99\u627f\u306f\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u4e2d\u6838\u3092\u6210\u3059\u91cd\u8981\u306a\u6a5f\u80fd\u3067\u3059\u3002\u65e2\u5b58\u306e\u30af\u30e9\u30b9\uff08\u57fa\u5e95\u30af\u30e9\u30b9\uff09\u306e\u7279\u5fb4\u3084\u6a5f\u80fd\u3092\u65b0\u3057\u3044\u30af\u30e9\u30b9\uff08\u6d3e\u751f\u30af\u30e9\u30b9\uff09\u306b\u5f15\u304d\u7d99\u304e\u3001\u30b3\u30fc\u30c9\u306e\u518d\u5229\u7528\u6027\u3068\u4fdd\u5b88\u6027\u3092\u9ad8\u3081\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u4ee5\u4e0b\u306e\u4f8b\u3067\u3001\u7d99\u627f\u306e\u57fa\u672c\u7684\u306a\u6982\u5ff5\u3092\u898b\u3066\u307f\u307e\u3057\u3087\u3046\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u57fa\u5e95\u30af\u30e9\u30b9\uff1a\u52d5\u7269\u306e\u57fa\u672c\u7684\u306a\u7279\u5fb4\u3092\u5b9a\u7fa9\nclass Animal {\nprotected:\n    std::string name;\n    int age;\n\npublic:\n    Animal(const std::string&amp; n, int a) : name(n), age(a) {}\n\n    virtual void makeSound() {\n        std::cout &lt;&lt; \"\u4f55\u304b\u306e\u97f3\u3092\u51fa\u3059\" &lt;&lt; std::endl;\n    }\n\n    void showInfo() {\n        std::cout &lt;&lt; \"\u540d\u524d: \" &lt;&lt; name &lt;&lt; \", \u5e74\u9f62: \" &lt;&lt; age &lt;&lt; std::endl;\n    }\n};\n\n\/\/ \u6d3e\u751f\u30af\u30e9\u30b9\uff1a\u72ac\u306e\u7279\u5fb4\u3092\u5b9a\u7fa9\nclass Dog : public Animal {\nprivate:\n    std::string breed;  \/\/ \u72ac\u7a2e\n\npublic:\n    Dog(const std::string&amp; n, int a, const std::string&amp; b)\n        : Animal(n, a), breed(b) {}\n\n    \/\/ \u57fa\u5e95\u30af\u30e9\u30b9\u306e\u30e1\u30bd\u30c3\u30c9\u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\n    void makeSound() override {\n        std::cout &lt;&lt; \"\u30ef\u30f3\uff01\u30ef\u30f3\uff01\" &lt;&lt; std::endl;\n    }\n};<\/pre>\n\n\n\n<p>\u3053\u306e\u30b3\u30fc\u30c9\u4f8b\u3067\u306f\u3001<code>Animal<\/code>\u30af\u30e9\u30b9\u306e\u6a5f\u80fd\u3092<code>Dog<\/code>\u30af\u30e9\u30b9\u304c\u7d99\u627f\u3057\u3066\u304a\u308a\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u7279\u5fb4\u304c\u898b\u3089\u308c\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30b3\u30fc\u30c9\u306e\u518d\u5229\u7528\uff1a<code>name<\/code>\u3084<code>age<\/code>\u306a\u3069\u306e\u5171\u901a\u5c5e\u6027\u3092\u518d\u5b9a\u7fa9\u3059\u308b\u5fc5\u8981\u304c\u306a\u3044<\/li>\n\n\n\n<li>\u6a5f\u80fd\u306e\u62e1\u5f35\uff1a<code>breed<\/code>\u3068\u3044\u3046\u72ac\u7279\u6709\u306e\u5c5e\u6027\u3092\u8ffd\u52a0<\/li>\n\n\n\n<li>\u632f\u308b\u821e\u3044\u306e\u7279\u6b8a\u5316\uff1a<code>makeSound()<\/code>\u30e1\u30bd\u30c3\u30c9\u3092\u72ac\u7528\u306b\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">\u7d99\u627f\u306b\u3088\u3063\u3066\u5b9f\u73fe\u3067\u304d\u308b3\u3064\u306e\u30e1\u30ea\u30c3\u30c8<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-3\">1. \u30b3\u30fc\u30c9\u306e\u518d\u5229\u7528\u6027\u5411\u4e0a<\/h4>\n\n\n\n<p>\u65e2\u5b58\u30af\u30e9\u30b9\u306e\u6a5f\u80fd\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u958b\u767a\u52b9\u7387\u304c\u5927\u5e45\u306b\u5411\u4e0a\u3057\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u4e0a\u8a18\u306e\u4f8b\u3067\u306f<code>Animal<\/code>\u30af\u30e9\u30b9\u306e<code>showInfo()<\/code>\u30e1\u30bd\u30c3\u30c9\u3092<code>Dog<\/code>\u30af\u30e9\u30b9\u304c\u81ea\u52d5\u7684\u306b\u5229\u7528\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Dog myDog(\"\u30dd\u30c1\", 3, \"\u67f4\u72ac\");\nmyDog.showInfo();  \/\/ Animal \u30af\u30e9\u30b9\u306e\u30e1\u30bd\u30c3\u30c9\u3092\u7d99\u627f\u3057\u3066\u4f7f\u7528<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-4\">2. \u4fdd\u5b88\u6027\u306e\u5411\u4e0a<\/h4>\n\n\n\n<p>\u5171\u901a\u6a5f\u80fd\u3092\u57fa\u5e95\u30af\u30e9\u30b9\u306b\u307e\u3068\u3081\u308b\u3053\u3068\u3067\u3001\u4fee\u6b63\u304c\u5fc5\u8981\u306a\u969b\u306e\u5f71\u97ff\u7bc4\u56f2\u3092\u9650\u5b9a\u3067\u304d\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u5168\u3066\u306e\u52d5\u7269\u306b\u5171\u901a\u3059\u308b\u65b0\u6a5f\u80fd\u3092\u8ffd\u52a0\u3059\u308b\u5834\u5408\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class Animal {\n    \/\/ \u65e2\u5b58\u306e\u30e1\u30f3\u30d0\u30fc...\n\n    \/\/ \u5168\u3066\u306e\u52d5\u7269\u306b\u4f53\u91cd\u3092\u8ffd\u52a0\n    void addWeight(double w) {\n        weight = w;\n        updateHealthStatus();  \/\/ \u5065\u5eb7\u72b6\u614b\u306e\u66f4\u65b0\n    }\n};<\/pre>\n\n\n\n<p>\u3053\u306e\u5909\u66f4\u306f\u3001\u5168\u3066\u306e\u6d3e\u751f\u30af\u30e9\u30b9\u306b\u81ea\u52d5\u7684\u306b\u53cd\u6620\u3055\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-5\">3. \u591a\u614b\u6027\u306e\u5b9f\u73fe<\/h4>\n\n\n\n<p>\u540c\u3058\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3067\u7570\u306a\u308b\u5b9f\u88c5\u3092\u63d0\u4f9b\u3067\u304d\u308b\u591a\u614b\u6027\u306b\u3088\u308a\u3001\u67d4\u8edf\u306a\u30d7\u30ed\u30b0\u30e9\u30e0\u8a2d\u8a08\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u52d5\u7269\u306e\u914d\u5217\u3067\u7570\u306a\u308b\u7a2e\u985e\u306e\u52d5\u7269\u3092\u7ba1\u7406\nstd::vector&lt;Animal*&gt; animals;\nanimals.push_back(new Dog(\"\u30dd\u30c1\", 3, \"\u67f4\u72ac\"));\nanimals.push_back(new Cat(\"\u30bf\u30de\", 2));  \/\/ \u5225\u306e\u6d3e\u751f\u30af\u30e9\u30b9\n\n\/\/ \u5404\u52d5\u7269\u306e\u9cf4\u304d\u58f0\u3092\u51fa\u3059\uff08\u591a\u614b\u6027\u306e\u6d3b\u7528\uff09\nfor (auto animal : animals) {\n    animal-&gt;makeSound();  \/\/ \u305d\u308c\u305e\u308c\u306e\u52d5\u7269\u304c\u9069\u5207\u306a\u9cf4\u304d\u58f0\u3092\u51fa\u3059\n}<\/pre>\n\n\n\n<p>\u3053\u306e\u3088\u3046\u306b\u3001\u7d99\u627f\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30b3\u30fc\u30c9\u306e\u518d\u5229\u7528\u6027\u3001\u4fdd\u5b88\u6027\u3001\u62e1\u5f35\u6027\u304c\u5411\u4e0a\u3057\u3001\u3088\u308a\u67d4\u8edf\u306a\u30d7\u30ed\u30b0\u30e9\u30e0\u8a2d\u8a08\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u6a5f\u80fd\u3092\u3088\u308a\u52b9\u679c\u7684\u306b\u6d3b\u7528\u3059\u308b\u305f\u3081\u306e\u5177\u4f53\u7684\u306a\u5b9f\u88c5\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-6\">C++\u306b\u304a\u3051\u308b\u7d99\u627f\u306e\u57fa\u672c\u6587\u6cd5\u3068\u5b9f\u88c5\u65b9\u6cd5<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-7\">public\u3068private\u3068protected\u7d99\u627f\u306e\u9055\u3044\u3068\u4f7f\u3044\u5206\u3051<\/h3>\n\n\n\n<p>C++\u3067\u306f\u7d99\u627f\u6642\u306e\u30a2\u30af\u30bb\u30b9\u6307\u5b9a\u5b50\u306b\u3088\u3063\u3066\u3001\u57fa\u5e95\u30af\u30e9\u30b9\u306e\u30e1\u30f3\u30d0\u30fc\u304c\u6d3e\u751f\u30af\u30e9\u30b9\u3067\u3069\u306e\u3088\u3046\u306b\u6271\u308f\u308c\u308b\u304b\u304c\u6c7a\u5b9a\u3055\u308c\u307e\u3059\u3002\u4ee5\u4e0b\u3067\u5404\u7a2e\u985e\u306e\u7279\u5fb4\u3068\u4f7f\u3044\u5206\u3051\u3092\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-8\">1. public\u7d99\u627f<\/h4>\n\n\n\n<p>\u6700\u3082\u4e00\u822c\u7684\u306a\u7d99\u627f\u65b9\u6cd5\u3067\u3001\u300cis-a\u300d\u95a2\u4fc2\u3092\u8868\u73fe\u3059\u308b\u969b\u306b\u4f7f\u7528\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class Base {\npublic:\n    void publicMethod() { \/* ... *\/ }\nprotected:\n    void protectedMethod() { \/* ... *\/ }\nprivate:\n    void privateMethod() { \/* ... *\/ }\n};\n\nclass Derived : public Base {  \/\/ public\u7d99\u627f\n    void someMethod() {\n        publicMethod();      \/\/ OK: public\u306fpublic\u306e\u307e\u307e\n        protectedMethod();   \/\/ OK: protected\u306fprotected\u306e\u307e\u307e\n        \/\/ privateMethod(); \/\/ \u30a8\u30e9\u30fc: private\u306b\u306f\u30a2\u30af\u30bb\u30b9\u4e0d\u53ef\n    }\n};\n\nint main() {\n    Derived d;\n    d.publicMethod();  \/\/ OK: public\u30e1\u30bd\u30c3\u30c9\u306f\u5916\u90e8\u304b\u3089\u30a2\u30af\u30bb\u30b9\u53ef\u80fd\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-9\">2. protected\u7d99\u627f<\/h4>\n\n\n\n<p>\u57fa\u5e95\u30af\u30e9\u30b9\u306e\u6a5f\u80fd\u3092\u6d3e\u751f\u30af\u30e9\u30b9\u3067\u306e\u307f\u4f7f\u7528\u3057\u3001\u5916\u90e8\u306b\u306f\u516c\u958b\u3057\u305f\u304f\u306a\u3044\u5834\u5408\u306b\u4f7f\u7528\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class Derived2 : protected Base {\n    void someMethod() {\n        publicMethod();      \/\/ OK: public\u306fprotected\u306b\u306a\u308b\n        protectedMethod();   \/\/ OK: protected\u306fprotected\u306e\u307e\u307e\n        \/\/ privateMethod(); \/\/ \u30a8\u30e9\u30fc: private\u306b\u306f\u30a2\u30af\u30bb\u30b9\u4e0d\u53ef\n    }\n};\n\nint main() {\n    Derived2 d;\n    \/\/ d.publicMethod();  \/\/ \u30a8\u30e9\u30fc: protected\u30e1\u30bd\u30c3\u30c9\u306f\u5916\u90e8\u304b\u3089\u30a2\u30af\u30bb\u30b9\u4e0d\u53ef\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-10\">3. private\u7d99\u627f<\/h4>\n\n\n\n<p>\u5b9f\u88c5\u306e\u518d\u5229\u7528\u304c\u76ee\u7684\u3067\u3001\u7d99\u627f\u95a2\u4fc2\u3092\u5916\u90e8\u306b\u516c\u958b\u3057\u305f\u304f\u306a\u3044\u5834\u5408\u306b\u4f7f\u7528\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class Derived3 : private Base {\n    void someMethod() {\n        publicMethod();      \/\/ OK: public\u306fprivate\u306b\u306a\u308b\n        protectedMethod();   \/\/ OK: protected\u306fprivate\u306b\u306a\u308b\n        \/\/ privateMethod(); \/\/ \u30a8\u30e9\u30fc: private\u306b\u306f\u30a2\u30af\u30bb\u30b9\u4e0d\u53ef\n    }\n};\n\nclass Further : public Derived3 {\n    void anotherMethod() {\n        \/\/ publicMethod();    \/\/ \u30a8\u30e9\u30fc: \u57fa\u5e95\u30af\u30e9\u30b9\u306e\u30e1\u30bd\u30c3\u30c9\u306b\u30a2\u30af\u30bb\u30b9\u4e0d\u53ef\n    }\n};<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-11\">virtual\u30ad\u30fc\u30ef\u30fc\u30c9\u306e\u91cd\u8981\u6027\u3068\u9069\u5207\u306a\u4f7f\u7528\u65b9\u6cd5<\/h3>\n\n\n\n<p>virtual\u30ad\u30fc\u30ef\u30fc\u30c9\u306f\u3001C++\u3067\u591a\u614b\u6027\u3092\u5b9f\u73fe\u3059\u308b\u305f\u3081\u306e\u91cd\u8981\u306a\u6a5f\u80fd\u3067\u3059\u3002\u4ee5\u4e0b\u306e\u4f8b\u3067\u3001\u305d\u306e\u91cd\u8981\u6027\u3092\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-12\">1. \u57fa\u672c\u7684\u306a\u4f7f\u7528\u65b9\u6cd5<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class Shape {\npublic:\n    \/\/ virtual\u30ad\u30fc\u30ef\u30fc\u30c9\u306b\u3088\u308a\u3001\u6d3e\u751f\u30af\u30e9\u30b9\u3067\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u53ef\u80fd\u306b\n    virtual double calculateArea() const {\n        return 0.0;\n    }\n\n    \/\/ \u6d3e\u751f\u30af\u30e9\u30b9\u3067\u30c7\u30b9\u30c8\u30e9\u30af\u30bf\u304c\u6b63\u3057\u304f\u547c\u3070\u308c\u308b\u3088\u3046\u306bvirtual\u3092\u6307\u5b9a\n    virtual ~Shape() = default;\n};\n\nclass Circle : public Shape {\nprivate:\n    double radius;\n\npublic:\n    Circle(double r) : radius(r) {}\n\n    \/\/ override\u6307\u5b9a\u3067\u610f\u56f3\u7684\u306a\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3067\u3042\u308b\u3053\u3068\u3092\u660e\u793a\n    double calculateArea() const override {\n        return 3.14159 * radius * radius;\n    }\n};\n\nclass Rectangle : public Shape {\nprivate:\n    double width;\n    double height;\n\npublic:\n    Rectangle(double w, double h) : width(w), height(h) {}\n\n    double calculateArea() const override {\n        return width * height;\n    }\n};<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-13\">2. \u7d14\u7c8b\u4eee\u60f3\u95a2\u6570\u3068\u62bd\u8c61\u30af\u30e9\u30b9<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class AbstractShape {\npublic:\n    \/\/ \u7d14\u7c8b\u4eee\u60f3\u95a2\u6570\u306e\u5b9a\u7fa9\n    virtual double calculateArea() const = 0;\n    virtual double calculatePerimeter() const = 0;\n\n    virtual ~AbstractShape() = default;\n};\n\nclass Square : public AbstractShape {\nprivate:\n    double side;\n\npublic:\n    Square(double s) : side(s) {}\n\n    \/\/ \u7d14\u7c8b\u4eee\u60f3\u95a2\u6570\u306e\u5b9f\u88c5\u304c\u5fc5\u9808\n    double calculateArea() const override {\n        return side * side;\n    }\n\n    double calculatePerimeter() const override {\n        return 4 * side;\n    }\n};<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-14\">3. virtual\u306e\u4f7f\u7528\u306b\u304a\u3051\u308b\u6ce8\u610f\u70b9<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3078\u306e\u5f71\u97ff<\/strong>:<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u4eee\u60f3\u95a2\u6570\u30c6\u30fc\u30d6\u30eb\uff08vtable\uff09\u306e\u30aa\u30fc\u30d0\u30fc\u30d8\u30c3\u30c9\u304c\u767a\u751f\nclass Base {\n    virtual void method() {} \/\/ vtable\u30dd\u30a4\u30f3\u30bf\u304c\u8ffd\u52a0\u3055\u308c\u308b\n};<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u3067\u306e\u4f7f\u7528\u5236\u9650<\/strong>:<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class Base {\npublic:\n    Base() {\n        initialize();  \/\/ \u6d3e\u751f\u30af\u30e9\u30b9\u306e\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u30d0\u30fc\u30b8\u30e7\u30f3\u306f\u547c\u3070\u308c\u306a\u3044\n    }\n    virtual void initialize() { \/* ... *\/ }\n};<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>virtual\u7d99\u627f\u306b\u3088\u308b\u30c0\u30a4\u30e4\u30e2\u30f3\u30c9\u554f\u984c\u306e\u89e3\u6c7a<\/strong>:<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class A { \/* ... *\/ };\nclass B : virtual public A { \/* ... *\/ };\nclass C : virtual public A { \/* ... *\/ };\nclass D : public B, public C { \/* ... *\/ };  \/\/ A\u306f\u4e00\u5ea6\u3060\u3051\u7d99\u627f\u3055\u308c\u308b<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u6a5f\u80fd\u3092\u9069\u5207\u306b\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u67d4\u8edf\u3067\u4fdd\u5b88\u6027\u306e\u9ad8\u3044\u30b3\u30fc\u30c9\u3092\u8a2d\u8a08\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u57fa\u672c\u7684\u306a\u6982\u5ff5\u3092\u6d3b\u7528\u3057\u305f\u5b9f\u8df5\u7684\u306a\u8a2d\u8a08\u30d1\u30bf\u30fc\u30f3\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-15\">\u5b9f\u8df5\u3067\u4f7f\u3048\u308b\u7d99\u627f\u306e\u8a2d\u8a08\u30d1\u30bf\u30fc\u30f3<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-16\">Template Method\u30d1\u30bf\u30fc\u30f3\u306b\u3088\u308b\u5171\u901a\u51e6\u7406\u306e\u62bd\u8c61\u5316<\/h3>\n\n\n\n<p>Template Method\u30d1\u30bf\u30fc\u30f3\u306f\u3001\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u9aa8\u683c\u3092\u57fa\u5e95\u30af\u30e9\u30b9\u3067\u5b9a\u7fa9\u3057\u3001\u5177\u4f53\u7684\u306a\u5b9f\u88c5\u3092\u6d3e\u751f\u30af\u30e9\u30b9\u3067\u884c\u3046\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u51e6\u7406\u306e\u57fa\u5e95\u30af\u30e9\u30b9\nclass DocumentProcessor {\nprotected:\n    \/\/ \u6d3e\u751f\u30af\u30e9\u30b9\u3067\u5b9f\u88c5\u3055\u308c\u308b\u5177\u4f53\u7684\u306a\u51e6\u7406\n    virtual void readDocument() = 0;\n    virtual void parseContent() = 0;\n    virtual void validateContent() = 0;\n    virtual void saveDocument() = 0;\n\npublic:\n    \/\/ \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30e1\u30bd\u30c3\u30c9\uff1a\u51e6\u7406\u306e\u6d41\u308c\u3092\u5b9a\u7fa9\n    void processDocument() {\n        readDocument();\n        parseContent();\n        validateContent();\n        saveDocument();\n        std::cout &lt;&lt; \"\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u51e6\u7406\u5b8c\u4e86\" &lt;&lt; std::endl;\n    }\n\n    virtual ~DocumentProcessor() = default;\n};\n\n\/\/ PDF\u6587\u66f8\u51e6\u7406\u30af\u30e9\u30b9\nclass PDFProcessor : public DocumentProcessor {\nprotected:\n    void readDocument() override {\n        std::cout &lt;&lt; \"PDF\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u307f\" &lt;&lt; std::endl;\n    }\n\n    void parseContent() override {\n        std::cout &lt;&lt; \"PDF\u5185\u5bb9\u3092\u89e3\u6790\" &lt;&lt; std::endl;\n    }\n\n    void validateContent() override {\n        std::cout &lt;&lt; \"PDF\u5f62\u5f0f\u3092\u691c\u8a3c\" &lt;&lt; std::endl;\n    }\n\n    void saveDocument() override {\n        std::cout &lt;&lt; \"\u51e6\u7406\u6e08\u307fPDF\u3092\u4fdd\u5b58\" &lt;&lt; std::endl;\n    }\n};<\/pre>\n\n\n\n<p>\u4f7f\u7528\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">void processDocuments() {\n    PDFProcessor pdfProc;\n    pdfProc.processDocument();  \/\/ \u5b9a\u7fa9\u3055\u308c\u305f\u9806\u5e8f\u3067\u51e6\u7406\u304c\u5b9f\u884c\u3055\u308c\u308b\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-17\">Strategy\u30d1\u30bf\u30fc\u30f3\u3092\u7528\u3044\u305f\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u5207\u308a\u66ff\u3048<\/h3>\n\n\n\n<p>Strategy\u30d1\u30bf\u30fc\u30f3\u3067\u306f\u3001\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u52d5\u7684\u306b\u5207\u308a\u66ff\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30b3\u30fc\u30c9\u3092\u5909\u66f4\u3059\u308b\u3053\u3068\u306a\u304f\u3001\u7570\u306a\u308b\u5b9f\u88c5\u3092\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u5727\u7e2e\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\nclass CompressionStrategy {\npublic:\n    virtual void compress(const std::string&amp; data) = 0;\n    virtual ~CompressionStrategy() = default;\n};\n\n\/\/ \u5177\u4f53\u7684\u306a\u5727\u7e2e\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u5b9f\u88c5\nclass ZipCompression : public CompressionStrategy {\npublic:\n    void compress(const std::string&amp; data) override {\n        std::cout &lt;&lt; \"ZIP\u3067\u5727\u7e2e: \" &lt;&lt; data &lt;&lt; std::endl;\n    }\n};\n\nclass GzipCompression : public CompressionStrategy {\npublic:\n    void compress(const std::string&amp; data) override {\n        std::cout &lt;&lt; \"GZIP\u3067\u5727\u7e2e: \" &lt;&lt; data &lt;&lt; std::endl;\n    }\n};\n\n\/\/ \u5727\u7e2e\u3092\u4f7f\u7528\u3059\u308b\u30af\u30e9\u30b9\nclass FileCompressor {\nprivate:\n    std::unique_ptr&lt;CompressionStrategy&gt; strategy;\n\npublic:\n    FileCompressor(std::unique_ptr&lt;CompressionStrategy&gt; s)\n        : strategy(std::move(s)) {}\n\n    void setStrategy(std::unique_ptr&lt;CompressionStrategy&gt; s) {\n        strategy = std::move(s);\n    }\n\n    void compress(const std::string&amp; data) {\n        strategy-&gt;compress(data);\n    }\n};<\/pre>\n\n\n\n<p>\u4f7f\u7528\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">void compressFiles() {\n    FileCompressor compressor(std::make_unique&lt;ZipCompression&gt;());\n    compressor.compress(\"sample.txt\");  \/\/ ZIP\u3067\u5727\u7e2e\n\n    \/\/ \u5727\u7e2e\u65b9\u5f0f\u3092\u52d5\u7684\u306b\u5207\u308a\u66ff\u3048\n    compressor.setStrategy(std::make_unique&lt;GzipCompression&gt;());\n    compressor.compress(\"sample.txt\");  \/\/ GZIP\u3067\u5727\u7e2e\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-18\">Bridge\u30d1\u30bf\u30fc\u30f3\u306b\u3088\u308b\u5b9f\u88c5\u306e\u5206\u96e2<\/h3>\n\n\n\n<p>Bridge\u30d1\u30bf\u30fc\u30f3\u306f\u3001\u62bd\u8c61\u90e8\u5206\u3068\u5b9f\u88c5\u90e8\u5206\u3092\u5206\u96e2\u3057\u3001\u305d\u308c\u305e\u308c\u3092\u72ec\u7acb\u3057\u3066\u5909\u66f4\u53ef\u80fd\u306b\u3059\u308b\u30d1\u30bf\u30fc\u30f3\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u5b9f\u88c5\u90e8\u5206\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\nclass DrawingAPI {\npublic:\n    virtual void drawCircle(double x, double y, double radius) = 0;\n    virtual ~DrawingAPI() = default;\n};\n\n\/\/ \u5177\u4f53\u7684\u306a\u5b9f\u88c5\uff08OpenGL\uff09\nclass OpenGLAPI : public DrawingAPI {\npublic:\n    void drawCircle(double x, double y, double radius) override {\n        std::cout &lt;&lt; \"OpenGL\u3067\u5186\u3092\u63cf\u753b: (\" &lt;&lt; x &lt;&lt; \",\" &lt;&lt; y \n                  &lt;&lt; \"), \u534a\u5f84=\" &lt;&lt; radius &lt;&lt; std::endl;\n    }\n};\n\n\/\/ \u5177\u4f53\u7684\u306a\u5b9f\u88c5\uff08Direct3D\uff09\nclass Direct3DAPI : public DrawingAPI {\npublic:\n    void drawCircle(double x, double y, double radius) override {\n        std::cout &lt;&lt; \"Direct3D\u3067\u5186\u3092\u63cf\u753b: (\" &lt;&lt; x &lt;&lt; \",\" &lt;&lt; y \n                  &lt;&lt; \"), \u534a\u5f84=\" &lt;&lt; radius &lt;&lt; std::endl;\n    }\n};\n\n\/\/ \u62bd\u8c61\u90e8\u5206\u306e\u57fa\u5e95\u30af\u30e9\u30b9\nclass Shape {\nprotected:\n    DrawingAPI* api;\n\npublic:\n    Shape(DrawingAPI* drawingAPI) : api(drawingAPI) {}\n    virtual void draw() = 0;\n    virtual void resizeByPercentage(double pct) = 0;\n    virtual ~Shape() = default;\n};\n\n\/\/ \u5177\u4f53\u7684\u306a\u56f3\u5f62\u30af\u30e9\u30b9\nclass Circle : public Shape {\nprivate:\n    double x, y, radius;\n\npublic:\n    Circle(double x, double y, double radius, DrawingAPI* drawingAPI)\n        : Shape(drawingAPI), x(x), y(y), radius(radius) {}\n\n    void draw() override {\n        api-&gt;drawCircle(x, y, radius);\n    }\n\n    void resizeByPercentage(double pct) override {\n        radius *= pct \/ 100.0;\n    }\n};<\/pre>\n\n\n\n<p>\u4f7f\u7528\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">void drawShapes() {\n    OpenGLAPI opengl;\n    Direct3DAPI direct3d;\n\n    Circle circleGL(1, 2, 3, &amp;opengl);\n    Circle circleD3D(4, 5, 6, &amp;direct3d);\n\n    circleGL.draw();    \/\/ OpenGL\u3067\u63cf\u753b\n    circleD3D.draw();   \/\/ Direct3D\u3067\u63cf\u753b\n\n    circleGL.resizeByPercentage(150);  \/\/ \u30b5\u30a4\u30ba\u5909\u66f4\n    circleGL.draw();    \/\/ \u5909\u66f4\u5f8c\u306e\u30b5\u30a4\u30ba\u3067\u63cf\u753b\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u3092\u9069\u5207\u306b\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u5229\u70b9\u304c\u5f97\u3089\u308c\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30b3\u30fc\u30c9\u306e\u518d\u5229\u7528\u6027\u304c\u5411\u4e0a<\/li>\n\n\n\n<li>\u6a5f\u80fd\u306e\u8ffd\u52a0\u30fb\u5909\u66f4\u304c\u5bb9\u6613<\/li>\n\n\n\n<li>\u30c6\u30b9\u30c8\u304c\u66f8\u304d\u3084\u3059\u304f\u306a\u308b<\/li>\n\n\n\n<li>\u30b3\u30fc\u30c9\u306e\u898b\u901a\u3057\u304c\u826f\u304f\u306a\u308b<\/li>\n<\/ol>\n\n\n\n<p>\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u30d1\u30bf\u30fc\u30f3\u3092\u7d44\u307f\u5408\u308f\u305b\u3066\u4f7f\u7528\u3059\u308b\u3053\u3068\u3082\u591a\u304f\u3001\u72b6\u6cc1\u306b\u5fdc\u3058\u3066\u6700\u9069\u306a\u30d1\u30bf\u30fc\u30f3\u3092\u9078\u629e\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-19\">\u7d99\u627f\u306b\u304a\u3051\u308b\u6ce8\u610f\u70b9\u3068\u4ee3\u66ff\u624b\u6bb5<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-20\">\u591a\u91cd\u7d99\u627f\u304c\u5f15\u304d\u8d77\u3053\u3059\u554f\u984c\u3068\u305d\u306e\u89e3\u6c7a\u7b56<\/h3>\n\n\n\n<p>\u591a\u91cd\u7d99\u627f\u306f\u5f37\u529b\u306a\u6a5f\u80fd\u3067\u3059\u304c\u3001\u9069\u5207\u306b\u4f7f\u7528\u3057\u306a\u3044\u3068\u6df1\u523b\u306a\u554f\u984c\u3092\u5f15\u304d\u8d77\u3053\u3059\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u4ee5\u4e0b\u3067\u4e3b\u306a\u554f\u984c\u70b9\u3068\u305d\u306e\u89e3\u6c7a\u7b56\u3092\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-21\">1. \u30c0\u30a4\u30e4\u30e2\u30f3\u30c9\u554f\u984c<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class Device {\nprotected:\n    std::string deviceId;\npublic:\n    Device(const std::string&amp; id) : deviceId(id) {}\n    virtual void initialize() {\n        std::cout &lt;&lt; \"Device \" &lt;&lt; deviceId &lt;&lt; \" initialized\" &lt;&lt; std::endl;\n    }\n};\n\n\/\/ \u554f\u984c\u306e\u3042\u308b\u5b9f\u88c5\u4f8b\nclass Printer : public Device {\npublic:\n    Printer(const std::string&amp; id) : Device(id) {}\n};\n\nclass Scanner : public Device {\npublic:\n    Scanner(const std::string&amp; id) : Device(id) {}\n};\n\nclass MultiFunctionPrinter : public Printer, public Scanner {\npublic:\n    \/\/ \u30b3\u30f3\u30d1\u30a4\u30eb\u30a8\u30e9\u30fc\uff1aDevice\u306e\u30e1\u30f3\u30d0\u30fc\u304c\u66d6\u6627\n    MultiFunctionPrinter(const std::string&amp; id) \n        : Printer(id), Scanner(id) {}\n};<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-22\">\u89e3\u6c7a\u7b56\uff1a\u4eee\u60f3\u7d99\u627f\u306e\u4f7f\u7528<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class Printer : virtual public Device {\npublic:\n    Printer(const std::string&amp; id) : Device(id) {}\n};\n\nclass Scanner : virtual public Device {\npublic:\n    Scanner(const std::string&amp; id) : Device(id) {}\n};\n\nclass MultiFunctionPrinter : public Printer, public Scanner {\npublic:\n    \/\/ \u6b63\u3057\u304f\u52d5\u4f5c\u3059\u308b\u5b9f\u88c5\n    MultiFunctionPrinter(const std::string&amp; id) \n        : Device(id), Printer(id), Scanner(id) {}\n};<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-23\">2. \u540d\u524d\u306e\u885d\u7a81\u554f\u984c<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class AudioDevice {\npublic:\n    virtual void process() {\n        std::cout &lt;&lt; \"Audio processing\" &lt;&lt; std::endl;\n    }\n};\n\nclass VideoDevice {\npublic:\n    virtual void process() {\n        std::cout &lt;&lt; \"Video processing\" &lt;&lt; std::endl;\n    }\n};\n\nclass MediaPlayer : public AudioDevice, public VideoDevice {\npublic:\n    \/\/ \u66d6\u6627\u3055\u3092\u89e3\u6d88\u3059\u308b\u305f\u3081\u306e\u660e\u793a\u7684\u306a\u6307\u5b9a\u304c\u5fc5\u8981\n    void process() {\n        AudioDevice::process();\n        VideoDevice::process();\n    }\n};<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-24\">\u7d99\u627f\u306e\u4ee3\u308f\u308a\u306b\u30b3\u30f3\u30dd\u30b8\u30b7\u30e7\u30f3\u3092\u4f7f\u3046\u3079\u304d\u5834\u9762<\/h3>\n\n\n\n<p>\u30b3\u30f3\u30dd\u30b8\u30b7\u30e7\u30f3\u306f\u300chas-a\u300d\u95a2\u4fc2\u3092\u8868\u73fe\u3059\u308b\u65b9\u6cd5\u3067\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u5834\u5408\u306b\u7d99\u627f\u3088\u308a\u3082\u9069\u5207\u306a\u9078\u629e\u3068\u306a\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5b9f\u884c\u6642\u306b\u632f\u308b\u821e\u3044\u3092\u5909\u66f4\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408<\/li>\n\n\n\n<li>\u57fa\u5e95\u30af\u30e9\u30b9\u306e\u5b9f\u88c5\u8a73\u7d30\u304b\u3089\u6d3e\u751f\u30af\u30e9\u30b9\u3092\u4fdd\u8b77\u3057\u305f\u3044\u5834\u5408<\/li>\n\n\n\n<li>\u8907\u6570\u306e\u30af\u30e9\u30b9\u306e\u6a5f\u80fd\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-25\">\u30b3\u30f3\u30dd\u30b8\u30b7\u30e7\u30f3\u306e\u5b9f\u88c5\u4f8b<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u7d99\u627f\u3092\u4f7f\u7528\u3057\u305f\u5834\u5408\u306e\u554f\u984c\u306e\u3042\u308b\u5b9f\u88c5\nclass Logger {\npublic:\n    virtual void log(const std::string&amp; message) = 0;\n};\n\nclass FileLogger : public Logger {\npublic:\n    void log(const std::string&amp; message) override {\n        std::cout &lt;&lt; \"File: \" &lt;&lt; message &lt;&lt; std::endl;\n    }\n};\n\nclass DatabaseLogger : public Logger {\npublic:\n    void log(const std::string&amp; message) override {\n        std::cout &lt;&lt; \"DB: \" &lt;&lt; message &lt;&lt; std::endl;\n    }\n};\n\n\/\/ \u8907\u6570\u306e\u30ed\u30b0\u51fa\u529b\u304c\u5fc5\u8981\u306a\u5834\u5408\u3001\u591a\u91cd\u7d99\u627f\u304c\u5fc5\u8981\u306b\u306a\u308b\nclass MultiLogger : public FileLogger, public DatabaseLogger {\n    \/\/ \u5b9f\u88c5\u304c\u8907\u96d1\u306b\u306a\u308b...\n};<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-26\">\u30b3\u30f3\u30dd\u30b8\u30b7\u30e7\u30f3\u3092\u4f7f\u7528\u3057\u305f\u6539\u5584\u4f8b<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class Logger {\npublic:\n    virtual void log(const std::string&amp; message) = 0;\n    virtual ~Logger() = default;\n};\n\nclass FileLogger : public Logger {\npublic:\n    void log(const std::string&amp; message) override {\n        std::cout &lt;&lt; \"File: \" &lt;&lt; message &lt;&lt; std::endl;\n    }\n};\n\nclass DatabaseLogger : public Logger {\npublic:\n    void log(const std::string&amp; message) override {\n        std::cout &lt;&lt; \"DB: \" &lt;&lt; message &lt;&lt; std::endl;\n    }\n};\n\n\/\/ \u30b3\u30f3\u30dd\u30b8\u30b7\u30e7\u30f3\u3092\u4f7f\u7528\u3057\u305f\u5b9f\u88c5\nclass LoggingSystem {\nprivate:\n    std::vector&lt;std::unique_ptr&lt;Logger&gt;&gt; loggers;\n\npublic:\n    void addLogger(std::unique_ptr&lt;Logger&gt; logger) {\n        loggers.push_back(std::move(logger));\n    }\n\n    void log(const std::string&amp; message) {\n        for (const auto&amp; logger : loggers) {\n            logger-&gt;log(message);\n        }\n    }\n};<\/pre>\n\n\n\n<p>\u4f7f\u7528\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">void demonstrateLogging() {\n    LoggingSystem loggingSystem;\n\n    loggingSystem.addLogger(std::make_unique&lt;FileLogger&gt;());\n    loggingSystem.addLogger(std::make_unique&lt;DatabaseLogger&gt;());\n\n    loggingSystem.log(\"\u30c6\u30b9\u30c8\u30e1\u30c3\u30bb\u30fc\u30b8\");  \/\/ \u4e21\u65b9\u306e\u30ed\u30ac\u30fc\u3067\u8a18\u9332\n}<\/pre>\n\n\n\n<p>\u30b3\u30f3\u30dd\u30b8\u30b7\u30e7\u30f3\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u5f97\u3089\u308c\u308b\u5229\u70b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u67d4\u8edf\u6027\u306e\u5411\u4e0a<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5b9f\u884c\u6642\u306b\u52d5\u7684\u306b\u30ed\u30ac\u30fc\u3092\u8ffd\u52a0\u30fb\u524a\u9664\u53ef\u80fd<\/li>\n\n\n\n<li>\u65b0\u3057\u3044\u30ed\u30ac\u30fc\u30bf\u30a4\u30d7\u306e\u8ffd\u52a0\u304c\u5bb9\u6613<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ab\u30d7\u30bb\u30eb\u5316\u306e\u5f37\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5185\u90e8\u5b9f\u88c5\u306e\u8a73\u7d30\u3092\u96a0\u853d<\/li>\n\n\n\n<li>\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306e\u5909\u66f4\u306b\u3088\u308b\u5f71\u97ff\u3092\u6700\u5c0f\u9650\u306b\u6291\u5236<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c6\u30b9\u30c8\u5bb9\u6613\u6027<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30e2\u30c3\u30af\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u4f5c\u6210\u304c\u5bb9\u6613<\/li>\n\n\n\n<li>\u500b\u3005\u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3092\u72ec\u7acb\u3057\u3066\u30c6\u30b9\u30c8\u53ef\u80fd<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4fdd\u5b88\u6027\u306e\u5411\u4e0a<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b3\u30fc\u30c9\u306e\u4f9d\u5b58\u95a2\u4fc2\u304c\u660e\u78ba<\/li>\n\n\n\n<li>\u6a5f\u80fd\u306e\u8ffd\u52a0\u30fb\u5909\u66f4\u304c\u5bb9\u6613<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u8a2d\u8a08\u9078\u629e\u3092\u9069\u5207\u306b\u884c\u3046\u3053\u3068\u3067\u3001\u3088\u308a\u4fdd\u5b88\u6027\u304c\u9ad8\u304f\u3001\u67d4\u8edf\u306a\u30b3\u30fc\u30c9\u3092\u4f5c\u6210\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-27\">\u73fe\u5834\u3067\u6d3b\u304d\u308b\u7d99\u627f\u306e\u5b9f\u8df5\u7684\u306a\u4f7f\u7528\u4f8b<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-28\">GUI\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306b\u304a\u3051\u308b\u7d99\u627f\u306e\u6d3b\u7528<\/h3>\n\n\n\n<p>GUI\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u306f\u3001\u30a6\u30a3\u30b8\u30a7\u30c3\u30c8\u306e\u968e\u5c64\u69cb\u9020\u3092\u8868\u73fe\u3059\u308b\u305f\u3081\u306b\u7d99\u627f\u304c\u52b9\u679c\u7684\u306b\u4f7f\u7528\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u4ee5\u4e0b\u306b\u5b9f\u8df5\u7684\u306a\u4f8b\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u57fa\u672c\u7684\u306a\u30a6\u30a3\u30b8\u30a7\u30c3\u30c8\u30af\u30e9\u30b9\nclass Widget {\nprotected:\n    int x, y, width, height;\n    bool visible;\n\npublic:\n    Widget(int x, int y, int w, int h)\n        : x(x), y(y), width(w), height(h), visible(true) {}\n\n    virtual void draw() = 0;\n    virtual void handleEvent(const Event&amp; event) = 0;\n    virtual bool containsPoint(int px, int py) {\n        return px &gt;= x &amp;&amp; px &lt; x + width &amp;&amp;\n               py &gt;= y &amp;&amp; py &lt; y + height;\n    }\n\n    virtual ~Widget() = default;\n};\n\n\/\/ \u30dc\u30bf\u30f3\u30a6\u30a3\u30b8\u30a7\u30c3\u30c8\nclass Button : public Widget {\nprivate:\n    std::string label;\n    std::function&lt;void()&gt; onClick;\n\npublic:\n    Button(int x, int y, int w, int h, const std::string&amp; text)\n        : Widget(x, y, w, h), label(text) {}\n\n    void draw() override {\n        std::cout &lt;&lt; \"\u63cf\u753b: \" &lt;&lt; label &lt;&lt; \" \u30dc\u30bf\u30f3 at (\" \n                  &lt;&lt; x &lt;&lt; \",\" &lt;&lt; y &lt;&lt; \")\" &lt;&lt; std::endl;\n    }\n\n    void handleEvent(const Event&amp; event) override {\n        if (event.type == EventType::CLICK &amp;&amp; containsPoint(event.x, event.y)) {\n            if (onClick) onClick();\n        }\n    }\n\n    void setOnClick(std::function&lt;void()&gt; handler) {\n        onClick = handler;\n    }\n};\n\n\/\/ \u30c6\u30ad\u30b9\u30c8\u30d5\u30a3\u30fc\u30eb\u30c9\u30a6\u30a3\u30b8\u30a7\u30c3\u30c8\nclass TextField : public Widget {\nprivate:\n    std::string text;\n    bool focused;\n\npublic:\n    TextField(int x, int y, int w, int h)\n        : Widget(x, y, w, h), focused(false) {}\n\n    void draw() override {\n        std::cout &lt;&lt; \"\u63cf\u753b: \u30c6\u30ad\u30b9\u30c8\u30d5\u30a3\u30fc\u30eb\u30c9 \\\"\" &lt;&lt; text \n                  &lt;&lt; \"\\\" at (\" &lt;&lt; x &lt;&lt; \",\" &lt;&lt; y &lt;&lt; \")\" &lt;&lt; std::endl;\n    }\n\n    void handleEvent(const Event&amp; event) override {\n        if (event.type == EventType::CLICK) {\n            focused = containsPoint(event.x, event.y);\n        } else if (event.type == EventType::KEY &amp;&amp; focused) {\n            text += event.key;\n        }\n    }\n};<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-29\">\u30b2\u30fc\u30e0\u958b\u767a\u3067\u306e\u7d99\u627f\u3092\u7528\u3044\u305f\u30ad\u30e3\u30e9\u30af\u30bf\u30fc\u8a2d\u8a08<\/h3>\n\n\n\n<p>\u30b2\u30fc\u30e0\u958b\u767a\u3067\u306f\u3001\u30ad\u30e3\u30e9\u30af\u30bf\u30fc\u306e\u7a2e\u985e\u3084\u632f\u308b\u821e\u3044\u3092\u52b9\u7387\u7684\u306b\u7ba1\u7406\u3059\u308b\u305f\u3081\u306b\u7d99\u627f\u304c\u6d3b\u7528\u3055\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30b2\u30fc\u30e0\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u306e\u57fa\u5e95\u30af\u30e9\u30b9\nclass GameObject {\nprotected:\n    Vector2D position;\n    float rotation;\n    bool active;\n\npublic:\n    GameObject(const Vector2D&amp; pos)\n        : position(pos), rotation(0.0f), active(true) {}\n\n    virtual void update(float deltaTime) = 0;\n    virtual void render() = 0;\n    virtual void onCollision(GameObject* other) = 0;\n\n    virtual ~GameObject() = default;\n};\n\n\/\/ \u30ad\u30e3\u30e9\u30af\u30bf\u30fc\u306e\u57fa\u5e95\u30af\u30e9\u30b9\nclass Character : public GameObject {\nprotected:\n    float health;\n    float speed;\n    std::string name;\n\npublic:\n    Character(const Vector2D&amp; pos, float maxHealth, float moveSpeed)\n        : GameObject(pos), health(maxHealth), speed(moveSpeed) {}\n\n    virtual void takeDamage(float amount) {\n        health = std::max(0.0f, health - amount);\n        if (health &lt;= 0) {\n            onDeath();\n        }\n    }\n\n    virtual void onDeath() = 0;\n};\n\n\/\/ \u30d7\u30ec\u30a4\u30e4\u30fc\u30ad\u30e3\u30e9\u30af\u30bf\u30fc\nclass Player : public Character {\nprivate:\n    Inventory inventory;\n    std::vector&lt;Skill&gt; skills;\n\npublic:\n    Player(const Vector2D&amp; pos)\n        : Character(pos, 100.0f, 5.0f) {}\n\n    void update(float deltaTime) override {\n        \/\/ \u30d7\u30ec\u30a4\u30e4\u30fc\u306e\u5165\u529b\u51e6\u7406\n        handleInput();\n        \/\/ \u4f4d\u7f6e\u306e\u66f4\u65b0\n        updatePosition(deltaTime);\n        \/\/ \u30b9\u30ad\u30eb\u306e\u30af\u30fc\u30eb\u30c0\u30a6\u30f3\u66f4\u65b0\n        updateSkillCooldowns(deltaTime);\n    }\n\n    void render() override {\n        std::cout &lt;&lt; \"\u30d7\u30ec\u30a4\u30e4\u30fc\u306e\u63cf\u753b at \" &lt;&lt; position.toString() &lt;&lt; std::endl;\n        renderHealthBar();\n        renderInventory();\n    }\n\n    void onCollision(GameObject* other) override {\n        if (auto* item = dynamic_cast&lt;Item*&gt;(other)) {\n            inventory.addItem(item);\n        } else if (auto* enemy = dynamic_cast&lt;Enemy*&gt;(other)) {\n            takeDamage(enemy-&gt;getDamage());\n        }\n    }\n\n    void onDeath() override {\n        std::cout &lt;&lt; \"\u30b2\u30fc\u30e0\u30aa\u30fc\u30d0\u30fc\" &lt;&lt; std::endl;\n        \/\/ \u30ea\u30b9\u30dd\u30fc\u30f3\u51e6\u7406\n        respawn();\n    }\n};\n\n\/\/ \u6575\u30ad\u30e3\u30e9\u30af\u30bf\u30fc\nclass Enemy : public Character {\nprivate:\n    float detectionRange;\n    AIController aiController;\n\npublic:\n    Enemy(const Vector2D&amp; pos, float health, float speed, float range)\n        : Character(pos, health, speed), detectionRange(range) {}\n\n    void update(float deltaTime) override {\n        \/\/ AI\u884c\u52d5\u306e\u66f4\u65b0\n        aiController.update(deltaTime);\n        \/\/ \u30d1\u30c8\u30ed\u30fc\u30eb\u3084\u8ffd\u8de1\u306e\u51e6\u7406\n        updateBehavior();\n        \/\/ \u4f4d\u7f6e\u306e\u66f4\u65b0\n        updatePosition(deltaTime);\n    }\n\n    void render() override {\n        std::cout &lt;&lt; \"\u6575\u306e\u63cf\u753b at \" &lt;&lt; position.toString() &lt;&lt; std::endl;\n        renderHealthBar();\n    }\n\n    void onCollision(GameObject* other) override {\n        if (auto* player = dynamic_cast&lt;Player*&gt;(other)) {\n            performAttack(player);\n        }\n    }\n\n    void onDeath() override {\n        \/\/ \u30a2\u30a4\u30c6\u30e0\u306e\u30c9\u30ed\u30c3\u30d7\n        dropLoot();\n        \/\/ \u7d4c\u9a13\u5024\u306e\u4ed8\u4e0e\n        giveExperience();\n        \/\/ \u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u306e\u524a\u9664\n        destroy();\n    }\n};<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5b9f\u88c5\u4f8b\u304b\u3089\u3001\u7d99\u627f\u3092\u6d3b\u7528\u3059\u308b\u969b\u306e\u91cd\u8981\u306a\u30dd\u30a4\u30f3\u30c8\u304c\u898b\u3048\u3066\u304d\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u9069\u5207\u306a\u62bd\u8c61\u5316\u30ec\u30d9\u30eb\u306e\u9078\u629e<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u57fa\u5e95\u30af\u30e9\u30b9\u3067\u306f\u5171\u901a\u306e\u632f\u308b\u821e\u3044\u3092\u5b9a\u7fa9<\/li>\n\n\n\n<li>\u5177\u4f53\u7684\u306a\u5b9f\u88c5\u306f\u6d3e\u751f\u30af\u30e9\u30b9\u306b\u59d4\u306d\u308b<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306e\u4e00\u8cab\u6027<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u540c\u3058\u57fa\u5e95\u30af\u30e9\u30b9\u304b\u3089\u6d3e\u751f\u3057\u305f\u30af\u30e9\u30b9\u306f\u540c\u3058\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092\u6301\u3064<\/li>\n\n\n\n<li>\u3053\u308c\u306b\u3088\u308a\u3001\u591a\u614b\u6027\u3092\u6d3b\u7528\u3057\u305f\u67d4\u8edf\u306a\u51e6\u7406\u304c\u53ef\u80fd\u306b<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u62e1\u5f35\u6027\u306e\u78ba\u4fdd<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u65b0\u3057\u3044\u7a2e\u985e\u306e\u30a6\u30a3\u30b8\u30a7\u30c3\u30c8\u3084\u30ad\u30e3\u30e9\u30af\u30bf\u30fc\u3092\u8ffd\u52a0\u3059\u308b\u969b\u306b\u3001\u65e2\u5b58\u306e\u30b3\u30fc\u30c9\u3092\u5909\u66f4\u3059\u308b\u5fc5\u8981\u304c\u306a\u3044<\/li>\n\n\n\n<li>\u30aa\u30fc\u30d7\u30f3\u30fb\u30af\u30ed\u30fc\u30ba\u30c9\u306e\u539f\u5247\u306b\u5f93\u3063\u305f\u8a2d\u8a08<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u518d\u5229\u7528\u53ef\u80fd\u306a\u30b3\u30fc\u30c9<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5171\u901a\u306e\u6a5f\u80fd\u3092\u57fa\u5e95\u30af\u30e9\u30b9\u306b\u5b9f\u88c5\u3059\u308b\u3053\u3068\u3067\u3001\u30b3\u30fc\u30c9\u306e\u91cd\u8907\u3092\u9632\u3050<\/li>\n\n\n\n<li>\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u6027\u306e\u5411\u4e0a\u306b\u3064\u306a\u304c\u308b<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5b9f\u8df5\u4f8b\u306f\u3001\u7d99\u627f\u304c\u9069\u5207\u306b\u4f7f\u7528\u3055\u308c\u305f\u5834\u5408\u306b\u3082\u305f\u3089\u3055\u308c\u308b\u5229\u70b9\u3092\u5177\u4f53\u7684\u306b\u793a\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-30\">\u7d99\u627f\u3092\u7528\u3044\u305f\u30b3\u30fc\u30c9\u306e\u30c6\u30b9\u30c8\u624b\u6cd5<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-31\">\u30e2\u30c3\u30af\u4f5c\u6210\u306b\u304a\u3051\u308b\u7d99\u627f\u306e\u6d3b\u7528\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u30c6\u30b9\u30c8\u6642\u306b\u306f\u3001\u5916\u90e8\u4f9d\u5b58\u6027\u3092\u6301\u3064\u30af\u30e9\u30b9\u3092\u30c6\u30b9\u30c8\u3059\u308b\u305f\u3081\u306b\u3001\u30e2\u30c3\u30af\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u7d99\u627f\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u52b9\u679c\u7684\u306a\u30e2\u30c3\u30af\u306e\u4f5c\u6210\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u306e\u62bd\u8c61\u57fa\u5e95\u30af\u30e9\u30b9\nclass DatabaseConnection {\npublic:\n    virtual bool connect(const std::string&amp; connectionString) = 0;\n    virtual bool execute(const std::string&amp; query) = 0;\n    virtual std::vector&lt;std::string&gt; fetchResults() = 0;\n    virtual void disconnect() = 0;\n    virtual ~DatabaseConnection() = default;\n};\n\n\/\/ \u5b9f\u969b\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u30af\u30e9\u30b9\nclass RealDatabaseConnection : public DatabaseConnection {\npublic:\n    bool connect(const std::string&amp; connectionString) override {\n        \/\/ \u5b9f\u969b\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u51e6\u7406\n        return true;\n    }\n\n    bool execute(const std::string&amp; query) override {\n        \/\/ \u5b9f\u969b\u306e\u30af\u30a8\u30ea\u5b9f\u884c\u51e6\u7406\n        return true;\n    }\n\n    std::vector&lt;std::string&gt; fetchResults() override {\n        \/\/ \u5b9f\u969b\u306e\u7d50\u679c\u53d6\u5f97\u51e6\u7406\n        return std::vector&lt;std::string&gt;();\n    }\n\n    void disconnect() override {\n        \/\/ \u5b9f\u969b\u306e\u5207\u65ad\u51e6\u7406\n    }\n};\n\n\/\/ \u30c6\u30b9\u30c8\u7528\u30e2\u30c3\u30af\u30af\u30e9\u30b9\nclass MockDatabaseConnection : public DatabaseConnection {\nprivate:\n    bool shouldConnectSucceed = true;\n    bool shouldExecuteSucceed = true;\n    std::vector&lt;std::string&gt; mockResults;\n    std::vector&lt;std::string&gt; executedQueries;\n\npublic:\n    \/\/ \u30e2\u30c3\u30af\u306e\u632f\u308b\u821e\u3044\u3092\u8a2d\u5b9a\u3059\u308b\u30e1\u30bd\u30c3\u30c9\n    void setConnectBehavior(bool succeed) {\n        shouldConnectSucceed = succeed;\n    }\n\n    void setExecuteBehavior(bool succeed) {\n        shouldExecuteSucceed = succeed;\n    }\n\n    void setMockResults(const std::vector&lt;std::string&gt;&amp; results) {\n        mockResults = results;\n    }\n\n    \/\/ \u5b9f\u884c\u3055\u308c\u305f\u30af\u30a8\u30ea\u3092\u53d6\u5f97\n    const std::vector&lt;std::string&gt;&amp; getExecutedQueries() const {\n        return executedQueries;\n    }\n\n    \/\/ \u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306e\u5b9f\u88c5\n    bool connect(const std::string&amp; connectionString) override {\n        return shouldConnectSucceed;\n    }\n\n    bool execute(const std::string&amp; query) override {\n        executedQueries.push_back(query);\n        return shouldExecuteSucceed;\n    }\n\n    std::vector&lt;std::string&gt; fetchResults() override {\n        return mockResults;\n    }\n\n    void disconnect() override {\n        \/\/ \u30e2\u30c3\u30af\u306e\u5207\u65ad\u51e6\u7406\n    }\n};\n\n\/\/ \u30c6\u30b9\u30c8\u5bfe\u8c61\u306e\u30af\u30e9\u30b9\nclass UserRepository {\nprivate:\n    DatabaseConnection&amp; db;\n\npublic:\n    UserRepository(DatabaseConnection&amp; connection) : db(connection) {}\n\n    bool addUser(const std::string&amp; username, const std::string&amp; email) {\n        std::string query = \"INSERT INTO users (username, email) VALUES ('\" +\n                           username + \"', '\" + email + \"')\";\n        return db.execute(query);\n    }\n\n    std::vector&lt;std::string&gt; findUsersByEmail(const std::string&amp; email) {\n        std::string query = \"SELECT * FROM users WHERE email = '\" + email + \"'\";\n        db.execute(query);\n        return db.fetchResults();\n    }\n};\n\n\/\/ \u30c6\u30b9\u30c8\u30b3\u30fc\u30c9\u4f8b\nvoid testUserRepository() {\n    \/\/ \u30e2\u30c3\u30af\u306e\u6e96\u5099\n    MockDatabaseConnection mockDb;\n    mockDb.setExecuteBehavior(true);\n    mockDb.setMockResults({\"user1\", \"user2\"});\n\n    \/\/ \u30c6\u30b9\u30c8\u5bfe\u8c61\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u4f5c\u6210\n    UserRepository repo(mockDb);\n\n    \/\/ \u30c6\u30b9\u30c8\u30b1\u30fc\u30b91: \u30e6\u30fc\u30b6\u30fc\u8ffd\u52a0\n    bool result = repo.addUser(\"testuser\", \"test@example.com\");\n    assert(result == true);\n    assert(mockDb.getExecutedQueries().back().find(\"INSERT INTO users\") != std::string::npos);\n\n    \/\/ \u30c6\u30b9\u30c8\u30b1\u30fc\u30b92: \u30e6\u30fc\u30b6\u30fc\u691c\u7d22\n    auto users = repo.findUsersByEmail(\"test@example.com\");\n    assert(users.size() == 2);\n    assert(users[0] == \"user1\");\n    assert(users[1] == \"user2\");\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-32\">\u30c6\u30b9\u30bf\u30d3\u30ea\u30c6\u30a3\u3092\u9ad8\u3081\u308b\u7d99\u627f\u306e\u8a2d\u8a08\u65b9\u91dd<\/h3>\n\n\n\n<p>\u30c6\u30b9\u30bf\u30d6\u30eb\u306a\u30b3\u30fc\u30c9\u3092\u66f8\u304f\u305f\u3081\u306b\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u8a2d\u8a08\u65b9\u91dd\u3092\u8003\u616e\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4f9d\u5b58\u6027\u306e\u6ce8\u5165<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30c6\u30b9\u30bf\u30d3\u30ea\u30c6\u30a3\u306e\u4f4e\u3044\u8a2d\u8a08\nclass BadDesign {\nprivate:\n    RealDatabaseConnection db;  \/\/ \u76f4\u63a5\u5177\u8c61\u30af\u30e9\u30b9\u3092\u4f7f\u7528\n\npublic:\n    void someMethod() {\n        db.execute(\"...\");\n    }\n};\n\n\/\/ \u30c6\u30b9\u30bf\u30d3\u30ea\u30c6\u30a3\u306e\u9ad8\u3044\u8a2d\u8a08\nclass GoodDesign {\nprivate:\n    DatabaseConnection&amp; db;  \/\/ \u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092\u4f7f\u7528\n\npublic:\n    GoodDesign(DatabaseConnection&amp; connection) : db(connection) {}\n\n    void someMethod() {\n        db.execute(\"...\");\n    }\n};<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>protected\u4eee\u60f3\u30e1\u30bd\u30c3\u30c9\u306e\u6d3b\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class DataProcessor {\npublic:\n    bool processData(const std::string&amp; data) {\n        if (!validateData(data)) return false;\n        return performProcessing(data);\n    }\n\nprotected:\n    \/\/ \u30c6\u30b9\u30c8\u3067\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u53ef\u80fd\n    virtual bool validateData(const std::string&amp; data) {\n        return !data.empty();\n    }\n\n    virtual bool performProcessing(const std::string&amp; data) = 0;\n};\n\n\/\/ \u30c6\u30b9\u30c8\u7528\u30af\u30e9\u30b9\nclass TestableDataProcessor : public DataProcessor {\nprotected:\n    bool validateData(const std::string&amp; data) override {\n        \/\/ \u30ab\u30b9\u30bf\u30e0\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u30ed\u30b8\u30c3\u30af\n        return true;\n    }\n\n    bool performProcessing(const std::string&amp; data) override {\n        \/\/ \u30c6\u30b9\u30c8\u7528\u306e\u51e6\u7406\n        return true;\n    }\n};<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30c6\u30b9\u30c8\u30c0\u30d6\u30eb\u306e\u968e\u5c64\u69cb\u9020<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u57fa\u672c\u7684\u306a\u30e2\u30c3\u30af\u6a5f\u80fd\nclass BaseMock : public DatabaseConnection {\nprotected:\n    bool defaultReturn = true;\n\npublic:\n    void setDefaultReturn(bool value) {\n        defaultReturn = value;\n    }\n};\n\n\/\/ \u8a73\u7d30\u306a\u632f\u308b\u821e\u3044\u3092\u30e2\u30c3\u30af\nclass AdvancedMock : public BaseMock {\nprivate:\n    std::map&lt;std::string, bool&gt; queryResults;\n\npublic:\n    void setQueryResult(const std::string&amp; query, bool result) {\n        queryResults[query] = result;\n    }\n\n    bool execute(const std::string&amp; query) override {\n        auto it = queryResults.find(query);\n        return it != queryResults.end() ? it-&gt;second : defaultReturn;\n    }\n};<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30c6\u30b9\u30c8\u624b\u6cd5\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u5229\u70b9\u304c\u5f97\u3089\u308c\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c6\u30b9\u30c8\u306e\u4fe1\u983c\u6027\u5411\u4e0a<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5916\u90e8\u4f9d\u5b58\u6027\u3092\u5236\u5fa1\u53ef\u80fd<\/li>\n\n\n\n<li>\u30c6\u30b9\u30c8\u306e\u518d\u73fe\u6027\u304c\u9ad8\u3044<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c6\u30b9\u30c8\u306e\u4fdd\u5b88\u6027\u5411\u4e0a<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30e2\u30c3\u30af\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u518d\u5229\u7528\u304c\u53ef\u80fd<\/li>\n\n\n\n<li>\u30c6\u30b9\u30c8\u30b3\u30fc\u30c9\u306e\u53ef\u8aad\u6027\u304c\u5411\u4e0a<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c6\u30b9\u30c8\u30ab\u30d0\u30ec\u30c3\u30b8\u306e\u5411\u4e0a<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30a8\u30c3\u30b8\u30b1\u30fc\u30b9\u306e\u30c6\u30b9\u30c8\u304c\u5bb9\u6613<\/li>\n\n\n\n<li>\u7570\u5e38\u7cfb\u306e\u30c6\u30b9\u30c8\u304c\u66f8\u304d\u3084\u3059\u3044<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u958b\u767a\u52b9\u7387\u306e\u5411\u4e0a<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30c6\u30b9\u30c8\u306e\u5b9f\u884c\u304c\u9ad8\u901f<\/li>\n\n\n\n<li>\u30c7\u30d0\u30c3\u30b0\u304c\u5bb9\u6613<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u624b\u6cd5\u3092\u9069\u5207\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u52b9\u679c\u7684\u306a\u30c6\u30b9\u30c8\u6226\u7565\u3092\u69cb\u7bc9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-33\">\u7d99\u627f\u3092\u4f7f\u3044\u3053\u306a\u3059\u305f\u3081\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-34\">LSP\uff08\u30ea\u30b9\u30b3\u30d5\u306e\u7f6e\u63db\u539f\u5247\uff09\u306b\u57fa\u3065\u304f\u7d99\u627f\u306e\u8a2d\u8a08<\/h3>\n\n\n\n<p>\u30ea\u30b9\u30b3\u30d5\u306e\u7f6e\u63db\u539f\u5247\uff08LSP\uff09\u306f\u3001\u57fa\u5e95\u30af\u30e9\u30b9\u304c\u4f7f\u7528\u3055\u308c\u3066\u3044\u308b\u3068\u3053\u308d\u3067\u306f\u3001\u305d\u306e\u30b5\u30d6\u30af\u30e9\u30b9\u3067\u3082\u4ee3\u7528\u3067\u304d\u308b\u3079\u304d\u3068\u3044\u3046\u539f\u5247\u3067\u3059\u3002\u3053\u306e\u539f\u5247\u306b\u5f93\u3046\u3053\u3068\u3067\u3001\u3088\u308a\u5805\u7262\u306a\u30b3\u30fc\u30c9\u3092\u8a2d\u8a08\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-35\">LSP\u306b\u9055\u53cd\u3059\u308b\u4f8b<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class Rectangle {\nprotected:\n    int width;\n    int height;\n\npublic:\n    virtual void setWidth(int w) { width = w; }\n    virtual void setHeight(int h) { height = h; }\n    virtual int getArea() const { return width * height; }\n};\n\nclass Square : public Rectangle {\npublic:\n    \/\/ LSP\u9055\u53cd\uff1a\u56db\u89d2\u5f62\u306e\u632f\u308b\u821e\u3044\u3092\u5909\u66f4\u3057\u3066\u3044\u308b\n    void setWidth(int w) override {\n        width = w;\n        height = w;  \/\/ \u6b63\u65b9\u5f62\u306e\u6027\u8cea\u3092\u4fdd\u3064\u305f\u3081\n    }\n\n    void setHeight(int h) override {\n        height = h;\n        width = h;   \/\/ \u6b63\u65b9\u5f62\u306e\u6027\u8cea\u3092\u4fdd\u3064\u305f\u3081\n    }\n};\n\n\/\/ \u3053\u306e\u95a2\u6570\u306f\u9577\u65b9\u5f62\u3092\u671f\u5f85\u3057\u3066\u3044\u308b\nvoid processRectangle(Rectangle&amp; rect) {\n    rect.setWidth(4);\n    rect.setHeight(5);\n    \/\/ \u9577\u65b9\u5f62\u306a\u3089\u9762\u7a4d\u306f20\u306e\u306f\u305a\u3060\u304c\u3001\n    \/\/ Square \u304c\u6e21\u3055\u308c\u305f\u5834\u5408\u306f25\u306b\u306a\u3063\u3066\u3057\u307e\u3046\n    assert(rect.getArea() == 20);  \/\/ Square \u306e\u5834\u5408\u3001\u5931\u6557\u3059\u308b\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-36\">LSP\u306b\u6e96\u62e0\u3057\u305f\u8a2d\u8a08<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u5f62\u72b6\u306e\u62bd\u8c61\u57fa\u5e95\u30af\u30e9\u30b9\nclass Shape {\npublic:\n    virtual double getArea() const = 0;\n    virtual ~Shape() = default;\n};\n\nclass Rectangle : public Shape {\nprivate:\n    int width;\n    int height;\n\npublic:\n    Rectangle(int w, int h) : width(w), height(h) {}\n\n    void setWidth(int w) { width = w; }\n    void setHeight(int h) { height = h; }\n    double getArea() const override { return width * height; }\n};\n\nclass Square : public Shape {\nprivate:\n    int side;\n\npublic:\n    explicit Square(int s) : side(s) {}\n\n    void setSide(int s) { side = s; }\n    double getArea() const override { return side * side; }\n};\n\n\/\/ \u5f62\u72b6\u3092\u51e6\u7406\u3059\u308b\u95a2\u6570\nvoid processShape(const Shape&amp; shape) {\n    \/\/ \u5f62\u72b6\u306e\u5177\u4f53\u7684\u306a\u578b\u306b\u4f9d\u5b58\u3057\u306a\u3044\u51e6\u7406\n    std::cout &lt;&lt; \"\u9762\u7a4d: \" &lt;&lt; shape.getArea() &lt;&lt; std::endl;\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-37\">\u5c06\u6765\u306e\u62e1\u5f35\u6027\u3092\u8003\u616e\u3057\u305f\u7d99\u627f\u968e\u5c64\u306e\u8a2d\u8a08<\/h3>\n\n\n\n<p>\u62e1\u5f35\u6027\u306e\u9ad8\u3044\u7d99\u627f\u968e\u5c64\u3092\u8a2d\u8a08\u3059\u308b\u305f\u3081\u306b\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u70b9\u306b\u6ce8\u610f\u3092\u6255\u3046\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-38\">1. \u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306e\u5206\u96e2\u539f\u5247\u306e\u9069\u7528<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u4e0d\u9069\u5207\u306a\u8a2d\u8a08\uff1a\u591a\u3059\u304e\u308b\u8cac\u52d9\nclass MultiPurposeDevice {\npublic:\n    virtual void print() = 0;\n    virtual void scan() = 0;\n    virtual void fax() = 0;\n    virtual void email() = 0;\n};\n\n\/\/ \u6539\u5584\u3055\u308c\u305f\u8a2d\u8a08\uff1a\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306e\u5206\u96e2\nclass Printer {\npublic:\n    virtual void print() = 0;\n    virtual ~Printer() = default;\n};\n\nclass Scanner {\npublic:\n    virtual void scan() = 0;\n    virtual ~Scanner() = default;\n};\n\nclass EmailSender {\npublic:\n    virtual void email() = 0;\n    virtual ~EmailSender() = default;\n};\n\n\/\/ \u5fc5\u8981\u306a\u6a5f\u80fd\u3060\u3051\u3092\u5b9f\u88c5\nclass SimpleScanner : public Scanner {\npublic:\n    void scan() override {\n        std::cout &lt;&lt; \"\u6587\u66f8\u3092\u30b9\u30ad\u30e3\u30f3\u4e2d...\" &lt;&lt; std::endl;\n    }\n};\n\nclass AdvancedPrinter : public Printer, public Scanner {\npublic:\n    void print() override {\n        std::cout &lt;&lt; \"\u6587\u66f8\u3092\u5370\u5237\u4e2d...\" &lt;&lt; std::endl;\n    }\n\n    void scan() override {\n        std::cout &lt;&lt; \"\u6587\u66f8\u3092\u30b9\u30ad\u30e3\u30f3\u4e2d...\" &lt;&lt; std::endl;\n    }\n};<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-39\">2. \u62bd\u8c61\u57fa\u5e95\u30af\u30e9\u30b9\u306e\u9069\u5207\u306a\u8a2d\u8a08<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30c7\u30fc\u30bf\u51e6\u7406\u306e\u305f\u3081\u306e\u62bd\u8c61\u57fa\u5e95\u30af\u30e9\u30b9\nclass DataProcessor {\npublic:\n    \/\/ \u5171\u901a\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\n    virtual void processData(const std::vector&lt;double&gt;&amp; data) = 0;\n    virtual std::string getProcessorName() const = 0;\n    virtual bool isProcessingComplete() const = 0;\n\n    \/\/ \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u5b9f\u88c5\u3092\u63d0\u4f9b\n    virtual void initialize() {\n        std::cout &lt;&lt; \"\u57fa\u672c\u7684\u306a\u521d\u671f\u5316\u3092\u5b9f\u884c\" &lt;&lt; std::endl;\n    }\n\n    \/\/ \u30d5\u30c3\u30af\u30e1\u30bd\u30c3\u30c9\n    virtual void preProcess() {}\n    virtual void postProcess() {}\n\n    virtual ~DataProcessor() = default;\n\nprotected:\n    \/\/ \u6d3e\u751f\u30af\u30e9\u30b9\u3067\u4f7f\u7528\u3059\u308b\u5171\u901a\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\n    bool validateData(const std::vector&lt;double&gt;&amp; data) {\n        return !data.empty();\n    }\n};\n\n\/\/ \u5e73\u5747\u5024\u8a08\u7b97\u30d7\u30ed\u30bb\u30c3\u30b5\nclass AverageProcessor : public DataProcessor {\nprivate:\n    double result = 0.0;\n    bool completed = false;\n\npublic:\n    void processData(const std::vector&lt;double&gt;&amp; data) override {\n        if (!validateData(data)) return;\n\n        preProcess();\n\n        double sum = 0.0;\n        for (const auto&amp; value : data) {\n            sum += value;\n        }\n        result = sum \/ data.size();\n        completed = true;\n\n        postProcess();\n    }\n\n    std::string getProcessorName() const override {\n        return \"Average Processor\";\n    }\n\n    bool isProcessingComplete() const override {\n        return completed;\n    }\n\nprotected:\n    void preProcess() override {\n        std::cout &lt;&lt; \"\u5e73\u5747\u5024\u8a08\u7b97\u306e\u524d\u51e6\u7406\" &lt;&lt; std::endl;\n    }\n};<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-40\">3. \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30e1\u30bd\u30c3\u30c9\u30d1\u30bf\u30fc\u30f3\u306e\u6d3b\u7528<\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class ReportGenerator {\npublic:\n    \/\/ \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30e1\u30bd\u30c3\u30c9\n    void generateReport() {\n        loadData();\n        validateData();\n        processData();\n        formatOutput();\n        if (shouldSendNotification()) {\n            sendNotification();\n        }\n    }\n\n    virtual ~ReportGenerator() = default;\n\nprotected:\n    virtual void loadData() = 0;\n    virtual void validateData() = 0;\n    virtual void processData() = 0;\n    virtual void formatOutput() = 0;\n\n    \/\/ \u30d5\u30c3\u30af\u30e1\u30bd\u30c3\u30c9\n    virtual bool shouldSendNotification() {\n        return false;\n    }\n\n    virtual void sendNotification() {\n        std::cout &lt;&lt; \"\u901a\u77e5\u3092\u9001\u4fe1\" &lt;&lt; std::endl;\n    }\n};\n\nclass SalesReportGenerator : public ReportGenerator {\nprotected:\n    void loadData() override {\n        std::cout &lt;&lt; \"\u58f2\u4e0a\u30c7\u30fc\u30bf\u3092\u8aad\u307f\u8fbc\u307f\" &lt;&lt; std::endl;\n    }\n\n    void validateData() override {\n        std::cout &lt;&lt; \"\u58f2\u4e0a\u30c7\u30fc\u30bf\u3092\u691c\u8a3c\" &lt;&lt; std::endl;\n    }\n\n    void processData() override {\n        std::cout &lt;&lt; \"\u58f2\u4e0a\u30c7\u30fc\u30bf\u3092\u96c6\u8a08\" &lt;&lt; std::endl;\n    }\n\n    void formatOutput() override {\n        std::cout &lt;&lt; \"\u58f2\u4e0a\u30ec\u30dd\u30fc\u30c8\u3092\u4f5c\u6210\" &lt;&lt; std::endl;\n    }\n\n    bool shouldSendNotification() override {\n        return true;  \/\/ \u58f2\u4e0a\u30ec\u30dd\u30fc\u30c8\u306f\u5e38\u306b\u901a\u77e5\u3092\u9001\u4fe1\n    }\n};<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u9069\u7528\u3059\u308b\u969b\u306e\u91cd\u8981\u306a\u30dd\u30a4\u30f3\u30c8\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u8a2d\u8a08\u306e\u4e00\u8cab\u6027<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u57fa\u5e95\u30af\u30e9\u30b9\u306e\u5951\u7d04\u3092\u5b88\u308b<\/li>\n\n\n\n<li>\u6d3e\u751f\u30af\u30e9\u30b9\u3067\u4e88\u671f\u305b\u306c\u632f\u308b\u821e\u3044\u3092\u8ffd\u52a0\u3057\u306a\u3044<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u62e1\u5f35\u6027\u3068\u4fdd\u5b88\u6027<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5c06\u6765\u306e\u8981\u4ef6\u5909\u66f4\u3092\u8003\u616e\u3057\u305f\u8a2d\u8a08<\/li>\n\n\n\n<li>\u5171\u901a\u30b3\u30fc\u30c9\u306e\u91cd\u8907\u3092\u907f\u3051\u308b<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ab\u30d7\u30bb\u30eb\u5316\u306e\u7dad\u6301<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5b9f\u88c5\u306e\u8a73\u7d30\u3092\u9069\u5207\u306b\u96a0\u853d<\/li>\n\n\n\n<li>\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306e\u5b89\u5b9a\u6027\u3092\u78ba\u4fdd<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c6\u30b9\u30bf\u30d3\u30ea\u30c6\u30a3\u306e\u78ba\u4fdd<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30e2\u30c3\u30af\u5316\u53ef\u80fd\u306a\u8a2d\u8a08<\/li>\n\n\n\n<li>\u4f9d\u5b58\u6027\u306e\u660e\u78ba\u306a\u5206\u96e2<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u539f\u5247\u306b\u5f93\u3046\u3053\u3068\u3067\u3001\u3088\u308a\u4fdd\u5b88\u6027\u304c\u9ad8\u304f\u3001\u62e1\u5f35\u3057\u3084\u3059\u3044\u30b3\u30fc\u30c9\u3092\u8a2d\u8a08\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Warning: Undefined array key &#8220;is_admin&#8221; in \/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/ &#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":{"0":"post-1814","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-cpp","7":"nothumb"},"_links":{"self":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1814","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1814"}],"version-history":[{"count":2,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1814\/revisions"}],"predecessor-version":[{"id":1816,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1814\/revisions\/1816"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1814"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1814"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1814"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}