{"id":2129,"date":"2025-03-24T08:48:13","date_gmt":"2025-03-23T23:48:13","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=2129"},"modified":"2025-03-24T08:48:39","modified_gmt":"2025-03-23T23:48:39","slug":"c%e3%81%ae%e3%82%aa%e3%83%96%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e6%8c%87%e5%90%91%e5%ae%8c%e5%85%a8%e3%82%ac%e3%82%a4%e3%83%89%ef%bc%9a%e7%8f%be%e5%a0%b4%e3%81%a7%e4%bd%bf%e3%81%88%e3%82%8b","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=2129","title":{"rendered":"C++\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u5b8c\u5168\u30ac\u30a4\u30c9\uff1a\u73fe\u5834\u3067\u4f7f\u3048\u308b\u5b9f\u88c5\u30c6\u30af\u30cb\u30c3\u30af7\u9078"},"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++\u306b\u304a\u3051\u308b\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u57fa\u790e<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">Java \u3068 Python \u3068\u306f\u7570\u306a\u308b C++ \u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u306e\u7279\u5fb4<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-2\">\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u306e4\u3064\u306e\u5927\u8981\u7d20\u3092C++\u3067\u5b9f\u73fe\u3059\u308b\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-3\">C++\u3067\u306e\u30af\u30e9\u30b9\u3068\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u5b9f\u88c5\u65b9\u6cd5<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-4\">\u30af\u30e9\u30b9\u5b9a\u7fa9\u3068\u30e1\u30f3\u30d0\u5909\u6570\u306e\u9069\u5207\u306a\u30ab\u30d7\u30bb\u30eb\u5316<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-5\">\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u3068\u30c7\u30b9\u30c8\u30e9\u30af\u30bf\u306e\u91cd\u8981\u6027\u3068\u5b9f\u88c5\u4f8b<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-6\">C++\u7279\u6709\u306e\u30e1\u30e2\u30ea\u7ba1\u7406\u3068\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u30e9\u30a4\u30d5\u30b5\u30a4\u30af\u30eb<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-7\">\u30b9\u30bf\u30c3\u30af\u3068\u30d2\u30fc\u30d7\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u7ba1\u7406\u306e\u9055\u3044<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-8\">\u30b9\u30de\u30fc\u30c8\u30dd\u30a4\u30f3\u30bf\u3092\u4f7f\u7528\u3057\u305f\u5b89\u5168\u306a\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u7ba1\u7406<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-9\">\u7d99\u627f\u3068\u591a\u614b\u6027\u306e\u5b9f\u8df5\u7684\u306a\u6d3b\u7528\u6cd5<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-10\">\u5358\u4e00\u7d99\u627f\u3068\u591a\u91cd\u7d99\u627f\u306e\u6d3b\u7528<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-11\">\u4eee\u60f3\u95a2\u6570\u3068\u30dd\u30ea\u30e2\u30fc\u30d5\u30a3\u30ba\u30e0\u306e\u5b9f\u88c5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-12\">\u73fe\u5834\u3067\u4f7f\u3048\u308b\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u8a2d\u8a08\u30d1\u30bf\u30fc\u30f3<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-13\">C++\u3067\u5b9f\u88c5\u3059\u308b\u4e3b\u8981\u306a\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-14\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u8003\u616e\u3057\u305f\u30d1\u30bf\u30fc\u30f3\u9078\u629e<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-15\">\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u30a8\u30e9\u30fc\u51e6\u7406<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-16\">\u4f8b\u5916\u51e6\u7406\u3092\u4f7f\u7528\u3057\u305f\u5805\u5b9f\u306a\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-17\">RAII\u30d1\u30bf\u30fc\u30f3\u306b\u3088\u308b\u5b89\u5168\u306a\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-18\">\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-19\">\u30b3\u30fc\u30c9\u306e\u4fdd\u5b88\u6027\u3092\u9ad8\u3081\u308b\u30af\u30e9\u30b9\u8a2d\u8a08\u306e\u539f\u5247<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-20\">\u30c6\u30b9\u30bf\u30d3\u30ea\u30c6\u30a3\u3092\u8003\u616e\u3057\u305f\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\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++\u306b\u304a\u3051\u308b\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u57fa\u790e<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">Java \u3068 Python \u3068\u306f\u7570\u306a\u308b C++ \u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u306e\u7279\u5fb4<\/h3>\n\n\n\n<p>C++\u306f\u3001\u9ad8\u6027\u80fd\u306a\u30b7\u30b9\u30c6\u30e0\u958b\u767a\u304b\u3089\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u307e\u3067\u5e45\u5e83\u304f\u4f7f\u7528\u3055\u308c\u308b\u30de\u30eb\u30c1\u30d1\u30e9\u30c0\u30a4\u30e0\u8a00\u8a9e\u3067\u3059\u3002Java \u3084 Python \u3068\u6bd4\u8f03\u3057\u3066\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u72ec\u81ea\u306e\u7279\u5fb4\u3092\u6301\u3063\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30e1\u30e2\u30ea\u7ba1\u7406\u306e\u76f4\u63a5\u5236\u5fa1<\/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 ResourceManager {\n   private:\n       int* data;  \/\/ \u751f\u30dd\u30a4\u30f3\u30bf\n   public:\n       ResourceManager() : data(new int[100]) {  \/\/ \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u3067\u30e1\u30e2\u30ea\u78ba\u4fdd\n           \/\/ \u521d\u671f\u5316\u51e6\u7406\n       }\n       ~ResourceManager() {  \/\/ \u30c7\u30b9\u30c8\u30e9\u30af\u30bf\u3067\u81ea\u52d5\u89e3\u653e\n           delete[] data;\n       }\n   };<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u591a\u91cd\u7d99\u627f\u306e\u30b5\u30dd\u30fc\u30c8<\/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 Interface1 {\n   public:\n       virtual void method1() = 0;  \/\/ \u7d14\u7c8b\u4eee\u60f3\u95a2\u6570\n   };\n\n   class Interface2 {\n   public:\n       virtual void method2() = 0;\n   };\n\n   class Implementation : public Interface1, public Interface2 {  \/\/ \u8907\u6570\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092\u5b9f\u88c5\n   public:\n       void method1() override { \/* \u5b9f\u88c5 *\/ }\n       void method2() override { \/* \u5b9f\u88c5 *\/ }\n   };<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e\u67d4\u8edf\u6027<\/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 OptimizedClass {\n   private:\n       std::vector&lt;int&gt; data;\n   public:\n       void reserveSpace(size_t size) {\n           data.reserve(size);  \/\/ \u30e1\u30e2\u30ea\u4e8b\u524d\u78ba\u4fdd\u306b\u3088\u308b\u6700\u9069\u5316\n       }\n       void processInPlace() {\n           \/\/ \u30c7\u30fc\u30bf\u3092\u76f4\u63a5\u64cd\u4f5c\u53ef\u80fd\n       }\n   };<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u306e4\u3064\u306e\u5927\u8981\u7d20\u3092C++\u3067\u5b9f\u73fe\u3059\u308b\u65b9\u6cd5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ab\u30d7\u30bb\u30eb\u5316<\/strong><br>\u30ab\u30d7\u30bb\u30eb\u5316\u306f\u3001\u30c7\u30fc\u30bf\u3068\u64cd\u4f5c\u3092\u3072\u3068\u3064\u306e\u30e6\u30cb\u30c3\u30c8\u306b\u307e\u3068\u3081\u3001\u5916\u90e8\u304b\u3089\u306e\u30a2\u30af\u30bb\u30b9\u3092\u5236\u5fa1\u3059\u308b\u6a5f\u80fd\u3067\u3059\u3002<\/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 BankAccount {\nprivate:  \/\/ \u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u30e1\u30f3\u30d0\uff08\u30ab\u30d7\u30bb\u30eb\u5316\uff09\n    double balance;\n    std::string accountNumber;\n\nprotected:  \/\/ \u7d99\u627f\u30af\u30e9\u30b9\u304b\u3089\u306e\u307f\u30a2\u30af\u30bb\u30b9\u53ef\u80fd\n    void updateBalance(double amount);\n\npublic:  \/\/ \u30d1\u30d6\u30ea\u30c3\u30af\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\n    BankAccount(const std::string&amp; accNum);\n    double getBalance() const;\n    void deposit(double amount);\n    bool withdraw(double amount);\n};<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u7d99\u627f<\/strong><br>C++\u3067\u306f\u3001\u5358\u4e00\u7d99\u627f\u3068\u591a\u91cd\u7d99\u627f\u306e\u4e21\u65b9\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u3002<\/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 Shape {\npublic:\n    virtual double area() const = 0;  \/\/ \u7d14\u7c8b\u4eee\u60f3\u95a2\u6570\n    virtual double perimeter() const = 0;\n};\n\nclass Rectangle : public Shape {\nprivate:\n    double width, height;\npublic:\n    Rectangle(double w, double h) : width(w), height(h) {}\n    double area() const override {\n        return width * height;\n    }\n    double perimeter() const override {\n        return 2 * (width + height);\n    }\n};<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30dd\u30ea\u30e2\u30fc\u30d5\u30a3\u30ba\u30e0<\/strong><br>C++\u3067\u306f\u3001\u4eee\u60f3\u95a2\u6570\u3092\u4f7f\u7528\u3057\u3066\u5b9f\u884c\u6642\u30dd\u30ea\u30e2\u30fc\u30d5\u30a3\u30ba\u30e0\u3092\u5b9f\u73fe\u3057\u307e\u3059\u3002<\/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=\"\">void processShape(const Shape&amp; shape) {\n    std::cout &lt;&lt; \"\u9762\u7a4d: \" &lt;&lt; shape.area() &lt;&lt; std::endl;\n    std::cout &lt;&lt; \"\u5468\u9577: \" &lt;&lt; shape.perimeter() &lt;&lt; std::endl;\n}\n\nint main() {\n    Rectangle rect(5.0, 3.0);\n    Circle circle(2.5);\n\n    processShape(rect);     \/\/ Rectangle\u7528\u306e\u5b9f\u88c5\u304c\u547c\u3070\u308c\u308b\n    processShape(circle);   \/\/ Circle\u7528\u306e\u5b9f\u88c5\u304c\u547c\u3070\u308c\u308b\n}<\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>\u62bd\u8c61\u5316<\/strong><br>\u62bd\u8c61\u30af\u30e9\u30b9\u3068\u7d14\u7c8b\u4eee\u60f3\u95a2\u6570\u3092\u4f7f\u7528\u3057\u3066\u3001\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002<\/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 Database {  \/\/ \u62bd\u8c61\u30af\u30e9\u30b9\npublic:\n    virtual void connect() = 0;  \/\/ \u7d14\u7c8b\u4eee\u60f3\u95a2\u6570\n    virtual void disconnect() = 0;\n    virtual bool execute(const std::string&amp; query) = 0;\n\n    virtual ~Database() {}  \/\/ \u4eee\u60f3\u30c7\u30b9\u30c8\u30e9\u30af\u30bf\n};\n\nclass MySQLDatabase : public Database {\npublic:\n    void connect() override {\n        \/\/ MySQL\u56fa\u6709\u306e\u63a5\u7d9a\u51e6\u7406\n    }\n    \/\/ \u305d\u306e\u4ed6\u306e\u30e1\u30bd\u30c3\u30c9\u5b9f\u88c5\n};<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u8981\u7d20\u3092\u9069\u5207\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u4fdd\u5b88\u6027\u304c\u9ad8\u304f\u3001\u518d\u5229\u7528\u53ef\u80fd\u306aC++\u30b3\u30fc\u30c9\u3092\u4f5c\u6210\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u7279\u306b\u3001C++\u3067\u306f\u30e1\u30e2\u30ea\u7ba1\u7406\u306e\u76f4\u63a5\u5236\u5fa1\u304c\u53ef\u80fd\u306a\u305f\u3081\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u6700\u9069\u5316\u3057\u3064\u3064\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u306e\u5229\u70b9\u3092\u6700\u5927\u9650\u306b\u6d3b\u7528\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-3\">C++\u3067\u306e\u30af\u30e9\u30b9\u3068\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u5b9f\u88c5\u65b9\u6cd5<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-4\">\u30af\u30e9\u30b9\u5b9a\u7fa9\u3068\u30e1\u30f3\u30d0\u5909\u6570\u306e\u9069\u5207\u306a\u30ab\u30d7\u30bb\u30eb\u5316<\/h3>\n\n\n\n<p>C++\u3067\u30af\u30e9\u30b9\u3092\u8a2d\u8a08\u3059\u308b\u969b\u306f\u3001\u9069\u5207\u306a\u30ab\u30d7\u30bb\u30eb\u5316\u3092\u901a\u3058\u3066\u30c7\u30fc\u30bf\u306e\u6574\u5408\u6027\u3092\u4fdd\u8b77\u3057\u3001\u30af\u30e9\u30b9\u306e\u8cac\u52d9\u3092\u660e\u78ba\u306b\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30a2\u30af\u30bb\u30b9\u6307\u5b9a\u5b50\u306e\u6226\u7565\u7684\u306a\u4f7f\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 Employee {\nprivate:  \/\/ \u30c7\u30d5\u30a9\u30eb\u30c8\u3067private\n    std::string name_;     \/\/ \u30e1\u30f3\u30d0\u5909\u6570\u306b\u306f '_' \u30b5\u30d5\u30a3\u30c3\u30af\u30b9\u3092\u4ed8\u3051\u308b\u3053\u3068\u304c\u591a\u3044\n    double salary_;\n    int employeeId_;\n\nprotected:  \/\/ \u6d3e\u751f\u30af\u30e9\u30b9\u304b\u3089\u30a2\u30af\u30bb\u30b9\u53ef\u80fd\n    void updateSalary(double newSalary);\n\npublic:  \/\/ \u5916\u90e8\u304b\u3089\u30a2\u30af\u30bb\u30b9\u53ef\u80fd\u306a\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\n    \/\/ const\u30e1\u30f3\u30d0\u95a2\u6570\u306b\u3088\u308b\u30c7\u30fc\u30bf\u53c2\u7167\n    std::string getName() const { return name_; }\n    double getSalary() const { return salary_; }\n\n    \/\/ \u5024\u306e\u691c\u8a3c\u3092\u542b\u3080\u30bb\u30c3\u30bf\u30fc\n    void setName(const std::string&amp; name) {\n        if (!name.empty()) {\n            name_ = name;\n        }\n    }\n};<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30e2\u30c0\u30f3C++\u3067\u306e\u30ab\u30d7\u30bb\u30eb\u5316\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/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 DataContainer {\nprivate:\n    std::vector&lt;int&gt; data_;\n    mutable std::mutex mutex_;  \/\/ const\u30e1\u30f3\u30d0\u95a2\u6570\u3067\u3082\u5909\u66f4\u53ef\u80fd\n\npublic:\n    \/\/ \u30b9\u30ec\u30c3\u30c9\u30bb\u30fc\u30d5\u306a\u30c7\u30fc\u30bf\u30a2\u30af\u30bb\u30b9\n    void addData(int value) {\n        std::lock_guard&lt;std::mutex&gt; lock(mutex_);\n        data_.push_back(value);\n    }\n\n    \/\/ const\u53c2\u7167\u306b\u3088\u308b\u52b9\u7387\u7684\u306a\u30c7\u30fc\u30bf\u5171\u6709\n    const std::vector&lt;int&gt;&amp; getData() const {\n        std::lock_guard&lt;std::mutex&gt; lock(mutex_);\n        return data_;\n    }\n};<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-5\">\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u3068\u30c7\u30b9\u30c8\u30e9\u30af\u30bf\u306e\u91cd\u8981\u6027\u3068\u5b9f\u88c5\u4f8b<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5404\u7a2e\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u306e\u5b9f\u88c5<\/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 ResourceHolder {\nprivate:\n    std::string* data_;\n    size_t size_;\n\npublic:\n    \/\/ \u30c7\u30d5\u30a9\u30eb\u30c8\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\n    ResourceHolder() : data_(nullptr), size_(0) {}\n\n    \/\/ \u30d1\u30e9\u30e1\u30fc\u30bf\u4ed8\u304d\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\uff08\u521d\u671f\u5316\u30ea\u30b9\u30c8\u4f7f\u7528\uff09\n    ResourceHolder(const std::string&amp; str) \n        : data_(new std::string(str))\n        , size_(str.length()) {\n    }\n\n    \/\/ \u30b3\u30d4\u30fc\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\n    ResourceHolder(const ResourceHolder&amp; other) \n        : data_(new std::string(*other.data_))\n        , size_(other.size_) {\n    }\n\n    \/\/ \u30e0\u30fc\u30d6\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\n    ResourceHolder(ResourceHolder&amp;&amp; other) noexcept \n        : data_(other.data_)\n        , size_(other.size_) {\n        other.data_ = nullptr;  \/\/ \u79fb\u52d5\u5143\u306e\u30ea\u30bd\u30fc\u30b9\u3092\u30af\u30ea\u30a2\n        other.size_ = 0;\n    }\n\n    \/\/ \u30c7\u30b9\u30c8\u30e9\u30af\u30bf\n    ~ResourceHolder() {\n        delete data_;  \/\/ \u30ea\u30bd\u30fc\u30b9\u306e\u89e3\u653e\n    }\n\n    \/\/ \u30b3\u30d4\u30fc\u4ee3\u5165\u6f14\u7b97\u5b50\n    ResourceHolder&amp; operator=(const ResourceHolder&amp; other) {\n        if (this != &amp;other) {  \/\/ \u81ea\u5df1\u4ee3\u5165\u30c1\u30a7\u30c3\u30af\n            delete data_;  \/\/ \u65e2\u5b58\u30ea\u30bd\u30fc\u30b9\u306e\u89e3\u653e\n            data_ = new std::string(*other.data_);\n            size_ = other.size_;\n        }\n        return *this;\n    }\n\n    \/\/ \u30e0\u30fc\u30d6\u4ee3\u5165\u6f14\u7b97\u5b50\n    ResourceHolder&amp; operator=(ResourceHolder&amp;&amp; other) noexcept {\n        if (this != &amp;other) {\n            delete data_;\n            data_ = other.data_;\n            size_ = other.size_;\n            other.data_ = nullptr;\n            other.size_ = 0;\n        }\n        return *this;\n    }\n};<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>RAII\u30d1\u30bf\u30fc\u30f3\u3092\u6d3b\u7528\u3057\u305f\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406<\/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 FileHandler {\nprivate:\n    std::unique_ptr&lt;std::ifstream&gt; file_;  \/\/ \u30b9\u30de\u30fc\u30c8\u30dd\u30a4\u30f3\u30bf\u306b\u3088\u308b\u81ea\u52d5\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406\n    std::string filename_;\n\npublic:\n    \/\/ \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u3067\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304f\n    FileHandler(const std::string&amp; filename) \n        : filename_(filename)\n        , file_(std::make_unique&lt;std::ifstream&gt;(filename)) {\n        if (!file_-&gt;is_open()) {\n            throw std::runtime_error(\"Failed to open file: \" + filename);\n        }\n    }\n\n    \/\/ \u30c7\u30b9\u30c8\u30e9\u30af\u30bf\u3067\u81ea\u52d5\u7684\u306b\u30d5\u30a1\u30a4\u30eb\u304c\u9589\u3058\u3089\u308c\u308b\n    \/\/ unique_ptr\u306e\u30c7\u30b9\u30c8\u30e9\u30af\u30bf\u304c\u547c\u3070\u308c\u308b\n    ~FileHandler() = default;\n\n    \/\/ \u30e0\u30fc\u30d6\u53ef\u80fd\u3060\u304c\u30b3\u30d4\u30fc\u4e0d\u53ef\n    FileHandler(FileHandler&amp;&amp;) = default;\n    FileHandler&amp; operator=(FileHandler&amp;&amp;) = default;\n    FileHandler(const FileHandler&amp;) = delete;\n    FileHandler&amp; operator=(const FileHandler&amp;) = delete;\n};<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5b9f\u88c5\u4f8b\u306f\u3001C++\u3067\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u57fa\u672c\u7684\u306a\u8003\u3048\u65b9\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002\u9069\u5207\u306a\u30ab\u30d7\u30bb\u30eb\u5316\u3068\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406\u3092\u884c\u3046\u3053\u3068\u3067\u3001\u5b89\u5168\u3067\u4fdd\u5b88\u6027\u306e\u9ad8\u3044\u30b3\u30fc\u30c9\u3092\u4f5c\u6210\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u7279\u306b\u3001\u30e2\u30c0\u30f3C++\u3067\u306f\u3001\u30b9\u30de\u30fc\u30c8\u30dd\u30a4\u30f3\u30bf\u3084\u30e0\u30fc\u30d6\u30bb\u30de\u30f3\u30c6\u30a3\u30af\u30b9\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u5b89\u5168\u3067\u52b9\u7387\u7684\u306a\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406\u304c\u53ef\u80fd\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-6\">C++\u7279\u6709\u306e\u30e1\u30e2\u30ea\u7ba1\u7406\u3068\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u30e9\u30a4\u30d5\u30b5\u30a4\u30af\u30eb<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-7\">\u30b9\u30bf\u30c3\u30af\u3068\u30d2\u30fc\u30d7\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u7ba1\u7406\u306e\u9055\u3044<\/h3>\n\n\n\n<p>C++\u306b\u304a\u3051\u308b\u30e1\u30e2\u30ea\u7ba1\u7406\u306e\u57fa\u672c\u306f\u3001\u30b9\u30bf\u30c3\u30af\u3068\u30d2\u30fc\u30d7\u306e\u9069\u5207\u306a\u4f7f\u3044\u5206\u3051\u3067\u3059\u3002\u305d\u308c\u305e\u308c\u306e\u7279\u5fb4\u3092\u7406\u89e3\u3057\u3001\u9069\u5207\u306b\u9078\u629e\u3059\u308b\u3053\u3068\u3067\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3068\u5b89\u5168\u6027\u3092\u4e21\u7acb\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b9\u30bf\u30c3\u30af\u30e1\u30e2\u30ea\u306e\u7279\u5fb4\u3068\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 Point {\n    double x_, y_;\npublic:\n    Point(double x, double y) : x_(x), y_(y) {}\n    double getDistance() const {\n        return std::sqrt(x_ * x_ + y_ * y_);\n    }\n};\n\nvoid stackExample() {\n    \/\/ \u30b9\u30bf\u30c3\u30af\u4e0a\u306b\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\n    Point p1(3.0, 4.0);  \/\/ \u81ea\u52d5\u7684\u306b\u30b9\u30b3\u30fc\u30d7\u7d42\u4e86\u6642\u306b\u7834\u68c4\n\n    \/\/ \u914d\u5217\u3082\u30b9\u30bf\u30c3\u30af\u4e0a\u306b\u78ba\u4fdd\u53ef\u80fd\n    Point points[100] = { Point(0,0) };  \/\/ \u30b5\u30a4\u30ba\u304c\u56fa\u5b9a\u306e\u5834\u5408\n\n    \/\/ \u30b9\u30b3\u30fc\u30d7\u3092\u629c\u3051\u308b\u3068\u81ea\u52d5\u7684\u306b\u7834\u68c4\u3055\u308c\u308b\n}  \/\/ p1\u3068points\u304c\u81ea\u52d5\u7684\u306b\u7834\u68c4<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30d2\u30fc\u30d7\u30e1\u30e2\u30ea\u306e\u7ba1\u7406\u3068\u30e9\u30a4\u30d5\u30b5\u30a4\u30af\u30eb<\/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 LargeObject {\n    std::vector&lt;double&gt; data_;\npublic:\n    LargeObject(size_t size) : data_(size) {}\n    void process() { \/* \u30c7\u30fc\u30bf\u51e6\u7406 *\/ }\n};\n\nvoid heapExample() {\n    \/\/ \u5f93\u6765\u306e\u30d2\u30fc\u30d7\u7ba1\u7406\uff08\u975e\u63a8\u5968\uff09\n    LargeObject* obj1 = new LargeObject(1000000);\n    try {\n        obj1-&gt;process();\n    }\n    catch (...) {\n        delete obj1;  \/\/ \u4f8b\u5916\u6642\u306b\u3082\u30ea\u30bd\u30fc\u30b9\u89e3\u653e\n        throw;\n    }\n    delete obj1;  \/\/ \u660e\u793a\u7684\u306a\u89e3\u653e\u304c\u5fc5\u8981\n\n    \/\/ \u30e2\u30c0\u30f3\u306a\u30d2\u30fc\u30d7\u7ba1\u7406\uff08\u63a8\u5968\uff09\n    auto obj2 = std::make_unique&lt;LargeObject&gt;(1000000);\n    obj2-&gt;process();  \/\/ \u4f8b\u5916\u304c\u767a\u751f\u3057\u3066\u3082\u81ea\u52d5\u7684\u306b\u89e3\u653e\u3055\u308c\u308b\n}  \/\/ obj2\u306f\u81ea\u52d5\u7684\u306b\u89e3\u653e<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-8\">\u30b9\u30de\u30fc\u30c8\u30dd\u30a4\u30f3\u30bf\u3092\u4f7f\u7528\u3057\u305f\u5b89\u5168\u306a\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u7ba1\u7406<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>unique_ptr\u306b\u3088\u308b\u6392\u4ed6\u7684\u6240\u6709\u6a29\u7ba1\u7406<\/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 Resource {\npublic:\n    void doWork() { std::cout &lt;&lt; \"Working...\\n\"; }\n};\n\nclass ResourceManager {\nprivate:\n    std::unique_ptr&lt;Resource&gt; resource_;\n\npublic:\n    ResourceManager() : resource_(std::make_unique&lt;Resource&gt;()) {}\n\n    \/\/ \u30e0\u30fc\u30d6\u306f\u53ef\u80fd\n    ResourceManager(ResourceManager&amp;&amp; other) = default;\n\n    \/\/ \u30b3\u30d4\u30fc\u306f\u7981\u6b62\n    ResourceManager(const ResourceManager&amp;) = delete;\n    ResourceManager&amp; operator=(const ResourceManager&amp;) = delete;\n\n    void useResource() {\n        if (resource_) {\n            resource_-&gt;doWork();\n        }\n    }\n};<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>shared_ptr\u306b\u3088\u308b\u5171\u6709\u6240\u6709\u6a29\u7ba1\u7406<\/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 SharedResource {\npublic:\n    void doWork() { std::cout &lt;&lt; \"Shared working...\\n\"; }\n};\n\nclass Worker {\nprivate:\n    std::shared_ptr&lt;SharedResource&gt; resource_;\n\npublic:\n    Worker(const std::shared_ptr&lt;SharedResource&gt;&amp; resource) \n        : resource_(resource) {}\n\n    void work() {\n        if (resource_) {\n            resource_-&gt;doWork();\n            std::cout &lt;&lt; \"Reference count: \" \n                      &lt;&lt; resource_.use_count() &lt;&lt; \"\\n\";\n        }\n    }\n};\n\n\/\/ \u4f7f\u7528\u4f8b\nvoid sharedPtrExample() {\n    auto resource = std::make_shared&lt;SharedResource&gt;();\n\n    Worker worker1(resource);\n    Worker worker2(resource);\n\n    worker1.work();  \/\/ Reference count: 3\n    worker2.work();  \/\/ Reference count: 3\n}  \/\/ resource\u306f\u5168\u3066\u306e\u53c2\u7167\u304c\u306a\u304f\u306a\u308b\u3068\u81ea\u52d5\u89e3\u653e<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>weak_ptr\u306b\u3088\u308b\u5faa\u74b0\u53c2\u7167\u306e\u9632\u6b62<\/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 Node {\nprivate:\n    std::shared_ptr&lt;Node&gt; next_;     \/\/ \u5f37\u3044\u53c2\u7167\n    std::weak_ptr&lt;Node&gt; previous_;   \/\/ \u5f31\u3044\u53c2\u7167\n    int data_;\n\npublic:\n    Node(int data) : data_(data) {}\n\n    void setNext(const std::shared_ptr&lt;Node&gt;&amp; next) {\n        next_ = next;\n    }\n\n    void setPrevious(const std::shared_ptr&lt;Node&gt;&amp; prev) {\n        previous_ = prev;  \/\/ \u5f31\u3044\u53c2\u7167\u3068\u3057\u3066\u4fdd\u6301\n    }\n\n    void processNode() {\n        if (auto prev = previous_.lock()) {  \/\/ \u5f31\u3044\u53c2\u7167\u3092\u30ed\u30c3\u30af\n            \/\/ previous\u30ce\u30fc\u30c9\u304c\u5b58\u5728\u3059\u308b\u5834\u5408\u306e\u51e6\u7406\n            std::cout &lt;&lt; \"Previous data: \" &lt;&lt; prev-&gt;data_ &lt;&lt; \"\\n\";\n        }\n\n        if (next_) {\n            std::cout &lt;&lt; \"Next data: \" &lt;&lt; next_-&gt;data_ &lt;&lt; \"\\n\";\n        }\n    }\n};<\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>\u30ab\u30b9\u30bf\u30e0\u30c7\u30ea\u30fc\u30bf\u306e\u5b9f\u88c5<\/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=\"\">template&lt;typename T&gt;\nstruct CustomDeleter {\n    void operator()(T* ptr) {\n        \/\/ \u30ab\u30b9\u30bf\u30e0\u306e\u30af\u30ea\u30fc\u30f3\u30a2\u30c3\u30d7\u51e6\u7406\n        std::cout &lt;&lt; \"Custom cleanup...\\n\";\n        delete ptr;\n    }\n};\n\nvoid customDeleterExample() {\n    \/\/ \u30ab\u30b9\u30bf\u30e0\u30c7\u30ea\u30fc\u30bf\u3092\u4f7f\u7528\u3057\u305funique_ptr\n    std::unique_ptr&lt;Resource, CustomDeleter&lt;Resource&gt;&gt; \n        ptr(new Resource());\n\n    \/\/ \u30d5\u30a1\u30a4\u30eb\u30cf\u30f3\u30c9\u30eb\u306a\u3069\u306e\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406\n    auto fileDeleter = [](FILE* fp) { \n        if (fp) fclose(fp); \n    };\n    std::unique_ptr&lt;FILE, decltype(fileDeleter)&gt; \n        file(fopen(\"test.txt\", \"r\"), fileDeleter);\n}<\/pre>\n\n\n\n<p>C++\u3067\u306e\u30e1\u30e2\u30ea\u7ba1\u7406\u306f\u3001\u9069\u5207\u306a\u30b9\u30de\u30fc\u30c8\u30dd\u30a4\u30f3\u30bf\u306e\u9078\u629e\u3068\u4f7f\u7528\u306b\u3088\u308a\u3001\u5927\u5e45\u306b\u5b89\u5168\u6027\u3092\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u7279\u306b\u3001<code>unique_ptr<\/code>\u3068<code>shared_ptr<\/code>\u3092\u72b6\u6cc1\u306b\u5fdc\u3058\u3066\u4f7f\u3044\u5206\u3051\u3001\u5fc5\u8981\u306b\u5fdc\u3058\u3066<code>weak_ptr<\/code>\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u3084\u5faa\u74b0\u53c2\u7167\u306a\u3069\u306e\u554f\u984c\u3092\u52b9\u679c\u7684\u306b\u9632\u3050\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u307e\u305f\u3001\u30b9\u30bf\u30c3\u30af\u3068\u30d2\u30fc\u30d7\u306e\u7279\u6027\u3092\u7406\u89e3\u3057\u3001\u9069\u5207\u306b\u4f7f\u3044\u5206\u3051\u308b\u3053\u3068\u3067\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u6700\u9069\u5316\u3082\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-9\">\u7d99\u627f\u3068\u591a\u614b\u6027\u306e\u5b9f\u8df5\u7684\u306a\u6d3b\u7528\u6cd5<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-10\">\u5358\u4e00\u7d99\u627f\u3068\u591a\u91cd\u7d99\u627f\u306e\u6d3b\u7528<\/h3>\n\n\n\n<p>C++\u306e\u7d99\u627f\u6a5f\u80fd\u3092\u52b9\u679c\u7684\u306b\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30b3\u30fc\u30c9\u306e\u518d\u5229\u7528\u6027\u3068\u62e1\u5f35\u6027\u3092\u9ad8\u3081\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5358\u4e00\u7d99\u627f\u306e\u57fa\u672c\u30d1\u30bf\u30fc\u30f3<\/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 Device {\nprotected:\n    std::string name_;\n    bool powered_;\n\npublic:\n    Device(const std::string&amp; name) \n        : name_(name), powered_(false) {}\n\n    virtual ~Device() = default;  \/\/ \u4eee\u60f3\u30c7\u30b9\u30c8\u30e9\u30af\u30bf\n\n    virtual void powerOn() {\n        powered_ = true;\n        std::cout &lt;&lt; name_ &lt;&lt; \" powered on\\n\";\n    }\n\n    virtual void powerOff() {\n        powered_ = false;\n        std::cout &lt;&lt; name_ &lt;&lt; \" powered off\\n\";\n    }\n\n    virtual void status() const {\n        std::cout &lt;&lt; name_ &lt;&lt; \" is \" \n                  &lt;&lt; (powered_ ? \"on\" : \"off\") &lt;&lt; \"\\n\";\n    }\n};\n\nclass Printer : public Device {\nprivate:\n    int pagesInTray_;\n\npublic:\n    Printer(const std::string&amp; name, int pages)\n        : Device(name), pagesInTray_(pages) {}\n\n    void print(const std::string&amp; document) {\n        if (!powered_) {\n            std::cout &lt;&lt; \"Printer is off!\\n\";\n            return;\n        }\n        if (pagesInTray_ &gt; 0) {\n            std::cout &lt;&lt; \"Printing: \" &lt;&lt; document &lt;&lt; \"\\n\";\n            --pagesInTray_;\n        }\n    }\n\n    void status() const override {\n        Device::status();\n        std::cout &lt;&lt; \"Pages in tray: \" &lt;&lt; pagesInTray_ &lt;&lt; \"\\n\";\n    }\n};<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u591a\u91cd\u7d99\u627f\u306e\u5b9f\u88c5<\/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 NetworkEnabled {\npublic:\n    virtual ~NetworkEnabled() = default;\n    virtual void connect() = 0;\n    virtual void disconnect() = 0;\n    virtual bool isConnected() const = 0;\n};\n\nclass USBEnabled {\npublic:\n    virtual ~USBEnabled() = default;\n    virtual void plugIn() = 0;\n    virtual void unplug() = 0;\n    virtual bool isPlugged() const = 0;\n};\n\nclass NetworkPrinter \n    : public Printer\n    , public NetworkEnabled\n    , public USBEnabled {\nprivate:\n    bool networkConnected_;\n    bool usbConnected_;\n\npublic:\n    NetworkPrinter(const std::string&amp; name, int pages)\n        : Printer(name, pages)\n        , networkConnected_(false)\n        , usbConnected_(false) {}\n\n    \/\/ NetworkEnabled \u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306e\u5b9f\u88c5\n    void connect() override {\n        networkConnected_ = true;\n        std::cout &lt;&lt; \"Network connected\\n\";\n    }\n\n    void disconnect() override {\n        networkConnected_ = false;\n        std::cout &lt;&lt; \"Network disconnected\\n\";\n    }\n\n    bool isConnected() const override {\n        return networkConnected_;\n    }\n\n    \/\/ USBEnabled \u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306e\u5b9f\u88c5\n    void plugIn() override {\n        usbConnected_ = true;\n        std::cout &lt;&lt; \"USB plugged in\\n\";\n    }\n\n    void unplug() override {\n        usbConnected_ = false;\n        std::cout &lt;&lt; \"USB unplugged\\n\";\n    }\n\n    bool isPlugged() const override {\n        return usbConnected_;\n    }\n};<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-11\">\u4eee\u60f3\u95a2\u6570\u3068\u30dd\u30ea\u30e2\u30fc\u30d5\u30a3\u30ba\u30e0\u306e\u5b9f\u88c5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u7d14\u7c8b\u4eee\u60f3\u95a2\u6570\u306b\u3088\u308b\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u5b9a\u7fa9<\/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 Shape {\npublic:\n    virtual ~Shape() = default;\n    virtual double area() const = 0;      \/\/ \u7d14\u7c8b\u4eee\u60f3\u95a2\u6570\n    virtual double perimeter() const = 0;  \/\/ \u7d14\u7c8b\u4eee\u60f3\u95a2\u6570\n    virtual void draw() const = 0;         \/\/ \u7d14\u7c8b\u4eee\u60f3\u95a2\u6570\n};\n\nclass Circle : public Shape {\nprivate:\n    double radius_;\n\npublic:\n    explicit Circle(double radius) : radius_(radius) {}\n\n    double area() const override {\n        return M_PI * radius_ * radius_;\n    }\n\n    double perimeter() const override {\n        return 2 * M_PI * radius_;\n    }\n\n    void draw() const override {\n        std::cout &lt;&lt; \"Drawing Circle with radius \" \n                  &lt;&lt; radius_ &lt;&lt; \"\\n\";\n    }\n};\n\nclass Rectangle : public Shape {\nprivate:\n    double width_;\n    double height_;\n\npublic:\n    Rectangle(double width, double height)\n        : width_(width), height_(height) {}\n\n    double area() const override {\n        return width_ * height_;\n    }\n\n    double perimeter() const override {\n        return 2 * (width_ + height_);\n    }\n\n    void draw() const override {\n        std::cout &lt;&lt; \"Drawing Rectangle \" &lt;&lt; width_ \n                  &lt;&lt; \"x\" &lt;&lt; height_ &lt;&lt; \"\\n\";\n    }\n};<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u4eee\u60f3\u95a2\u6570\u30c6\u30fc\u30d6\u30eb\u3068\u52d5\u7684\u30c7\u30a3\u30b9\u30d1\u30c3\u30c1\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 ShapeProcessor {\npublic:\n    static void processShapes(const std::vector&lt;std::unique_ptr&lt;Shape&gt;&gt;&amp; shapes) {\n        double totalArea = 0.0;\n        double totalPerimeter = 0.0;\n\n        for (const auto&amp; shape : shapes) {\n            \/\/ \u52d5\u7684\u30c7\u30a3\u30b9\u30d1\u30c3\u30c1\u306b\u3088\u308a\u9069\u5207\u306a\u30e1\u30bd\u30c3\u30c9\u304c\u547c\u3070\u308c\u308b\n            shape-&gt;draw();\n            totalArea += shape-&gt;area();\n            totalPerimeter += shape-&gt;perimeter();\n        }\n\n        std::cout &lt;&lt; \"Total Area: \" &lt;&lt; totalArea &lt;&lt; \"\\n\";\n        std::cout &lt;&lt; \"Total Perimeter: \" &lt;&lt; totalPerimeter &lt;&lt; \"\\n\";\n    }\n};\n\n\/\/ \u4f7f\u7528\u4f8b\nvoid shapeExample() {\n    std::vector&lt;std::unique_ptr&lt;Shape&gt;&gt; shapes;\n    shapes.push_back(std::make_unique&lt;Circle&gt;(5.0));\n    shapes.push_back(std::make_unique&lt;Rectangle&gt;(4.0, 6.0));\n\n    ShapeProcessor::processShapes(shapes);\n}<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u4eee\u60f3\u7d99\u627f\u306b\u3088\u308b\u83f1\u5f62\u7d99\u627f\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 Animal {\nprotected:\n    std::string name_;\n\npublic:\n    explicit Animal(const std::string&amp; name) : name_(name) {}\n    virtual ~Animal() = default;\n    virtual void eat() = 0;\n};\n\nclass Flying : virtual public Animal {\npublic:\n    Flying(const std::string&amp; name) : Animal(name) {}\n    virtual void fly() = 0;\n};\n\nclass Swimming : virtual public Animal {\npublic:\n    Swimming(const std::string&amp; name) : Animal(name) {}\n    virtual void swim() = 0;\n};\n\nclass Duck : public Flying, public Swimming {\npublic:\n    Duck(const std::string&amp; name) \n        : Animal(name)  \/\/ \u4e00\u5ea6\u3060\u3051\u57fa\u5e95\u30af\u30e9\u30b9\u3092\u521d\u671f\u5316\n        , Flying(name)\n        , Swimming(name) {}\n\n    void eat() override {\n        std::cout &lt;&lt; name_ &lt;&lt; \" is eating\\n\";\n    }\n\n    void fly() override {\n        std::cout &lt;&lt; name_ &lt;&lt; \" is flying\\n\";\n    }\n\n    void swim() override {\n        std::cout &lt;&lt; name_ &lt;&lt; \" is swimming\\n\";\n    }\n};<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5b9f\u88c5\u4f8b\u306f\u3001C++\u306b\u304a\u3051\u308b\u7d99\u627f\u3068\u591a\u614b\u6027\u306e\u5b9f\u8df5\u7684\u306a\u6d3b\u7528\u65b9\u6cd5\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002\u7279\u306b\u3001\u4eee\u60f3\u95a2\u6570\u3092\u4f7f\u7528\u3057\u305f\u52d5\u7684\u30c7\u30a3\u30b9\u30d1\u30c3\u30c1\u3068\u3001\u591a\u91cd\u7d99\u627f\u306b\u304a\u3051\u308b\u554f\u984c\u56de\u907f\u306e\u30c6\u30af\u30cb\u30c3\u30af\u306f\u3001\u5927\u898f\u6a21\u306a\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u30b7\u30b9\u30c6\u30e0\u306e\u8a2d\u8a08\u306b\u304a\u3044\u3066\u91cd\u8981\u306a\u5f79\u5272\u3092\u679c\u305f\u3057\u307e\u3059\u3002\u307e\u305f\u3001\u9069\u5207\u306a\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u8a2d\u8a08\u3068\u7d99\u627f\u306e\u4f7f\u7528\u306b\u3088\u308a\u3001\u30b3\u30fc\u30c9\u306e\u518d\u5229\u7528\u6027\u3068\u4fdd\u5b88\u6027\u3092\u5927\u5e45\u306b\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-12\">\u73fe\u5834\u3067\u4f7f\u3048\u308b\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u8a2d\u8a08\u30d1\u30bf\u30fc\u30f3<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-13\">C++\u3067\u5b9f\u88c5\u3059\u308b\u4e3b\u8981\u306a\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Factory\u30d1\u30bf\u30fc\u30f3<\/strong><br>\u8907\u96d1\u306a\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u751f\u6210\u3092\u96a0\u853d\u3057\u3001\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092\u901a\u3058\u3066\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/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=\"\">\/\/ \u88fd\u54c1\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\nclass Document {\npublic:\n    virtual ~Document() = default;\n    virtual void open() = 0;\n    virtual void save() = 0;\n};\n\n\/\/ \u5177\u4f53\u7684\u306a\u88fd\u54c1\u30af\u30e9\u30b9\nclass PDFDocument : public Document {\npublic:\n    void open() override {\n        std::cout &lt;&lt; \"Opening PDF document\\n\";\n    }\n    void save() override {\n        std::cout &lt;&lt; \"Saving PDF document\\n\";\n    }\n};\n\nclass WordDocument : public Document {\npublic:\n    void open() override {\n        std::cout &lt;&lt; \"Opening Word document\\n\";\n    }\n    void save() override {\n        std::cout &lt;&lt; \"Saving Word document\\n\";\n    }\n};\n\n\/\/ \u30d5\u30a1\u30af\u30c8\u30ea\u30fc\u30af\u30e9\u30b9\nclass DocumentFactory {\npublic:\n    static std::unique_ptr&lt;Document&gt; createDocument(const std::string&amp; type) {\n        if (type == \"pdf\") {\n            return std::make_unique&lt;PDFDocument&gt;();\n        } else if (type == \"word\") {\n            return std::make_unique&lt;WordDocument&gt;();\n        }\n        throw std::runtime_error(\"Unknown document type\");\n    }\n};<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>Observer\u30d1\u30bf\u30fc\u30f3<\/strong><br>\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u9593\u306e1\u5bfe\u591a\u306e\u4f9d\u5b58\u95a2\u4fc2\u3092\u5b9a\u7fa9\u3057\u3001\u3042\u308b\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u72b6\u614b\u304c\u5909\u5316\u3057\u305f\u969b\u306b\u3001\u4f9d\u5b58\u3059\u308b\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u81ea\u52d5\u7684\u306b\u901a\u77e5\u3057\u307e\u3059\u3002<\/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 Observer {\npublic:\n    virtual ~Observer() = default;\n    virtual void update(const std::string&amp; message) = 0;\n};\n\nclass Subject {\nprivate:\n    std::vector&lt;std::shared_ptr&lt;Observer&gt;&gt; observers_;\n\npublic:\n    void attach(std::shared_ptr&lt;Observer&gt; observer) {\n        observers_.push_back(observer);\n    }\n\n    void detach(std::shared_ptr&lt;Observer&gt; observer) {\n        observers_.erase(\n            std::remove(observers_.begin(), observers_.end(), observer),\n            observers_.end()\n        );\n    }\n\n    void notify(const std::string&amp; message) {\n        for (const auto&amp; observer : observers_) {\n            observer-&gt;update(message);\n        }\n    }\n};\n\nclass ConcreteObserver : public Observer {\nprivate:\n    std::string name_;\n\npublic:\n    explicit ConcreteObserver(std::string name) : name_(std::move(name)) {}\n\n    void update(const std::string&amp; message) override {\n        std::cout &lt;&lt; name_ &lt;&lt; \" received message: \" &lt;&lt; message &lt;&lt; \"\\n\";\n    }\n};<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>Strategy\u30d1\u30bf\u30fc\u30f3<\/strong><br>\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u30ab\u30d7\u30bb\u30eb\u5316\u3057\u3001\u5b9f\u884c\u6642\u306b\u5207\u308a\u66ff\u3048\u53ef\u80fd\u306b\u3057\u307e\u3059\u3002<\/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=\"\">\/\/ \u6226\u7565\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\nclass SortStrategy {\npublic:\n    virtual ~SortStrategy() = default;\n    virtual void sort(std::vector&lt;int&gt;&amp; data) = 0;\n};\n\n\/\/ \u5177\u4f53\u7684\u306a\u6226\u7565\u30af\u30e9\u30b9\nclass QuickSort : public SortStrategy {\npublic:\n    void sort(std::vector&lt;int&gt;&amp; data) override {\n        std::cout &lt;&lt; \"Performing quick sort\\n\";\n        std::sort(data.begin(), data.end());\n    }\n};\n\nclass MergeSort : public SortStrategy {\npublic:\n    void sort(std::vector&lt;int&gt;&amp; data) override {\n        std::cout &lt;&lt; \"Performing merge sort\\n\";\n        std::stable_sort(data.begin(), data.end());\n    }\n};\n\n\/\/ \u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u30af\u30e9\u30b9\nclass Sorter {\nprivate:\n    std::unique_ptr&lt;SortStrategy&gt; strategy_;\n\npublic:\n    explicit Sorter(std::unique_ptr&lt;SortStrategy&gt; strategy)\n        : strategy_(std::move(strategy)) {}\n\n    void setStrategy(std::unique_ptr&lt;SortStrategy&gt; strategy) {\n        strategy_ = std::move(strategy);\n    }\n\n    void performSort(std::vector&lt;int&gt;&amp; data) {\n        strategy_-&gt;sort(data);\n    }\n};<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-14\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u8003\u616e\u3057\u305f\u30d1\u30bf\u30fc\u30f3\u9078\u629e<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b7\u30f3\u30b0\u30eb\u30c8\u30f3\u30d1\u30bf\u30fc\u30f3\u306e\u6700\u9069\u5316<\/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 Singleton {\nprivate:\n    Singleton() = default;\n\npublic:\n    \/\/ Meyer's Singleton: \u30b9\u30ec\u30c3\u30c9\u30bb\u30fc\u30d5\u3067\u52b9\u7387\u7684\n    static Singleton&amp; getInstance() {\n        static Singleton instance;\n        return instance;\n    }\n\n    \/\/ \u30b3\u30d4\u30fc\u3068\u30e0\u30fc\u30d6\u3092\u7981\u6b62\n    Singleton(const Singleton&amp;) = delete;\n    Singleton&amp; operator=(const Singleton&amp;) = delete;\n    Singleton(Singleton&amp;&amp;) = delete;\n    Singleton&amp; operator=(Singleton&amp;&amp;) = delete;\n\n    void doSomething() {\n        std::cout &lt;&lt; \"Singleton is doing something\\n\";\n    }\n};<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>Command\u30d1\u30bf\u30fc\u30f3\u306e\u8efd\u91cf\u5b9f\u88c5<\/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=\"\">\/\/ \u8efd\u91cf\u30b3\u30de\u30f3\u30c9\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\nusing Command = std::function&lt;void()&gt;;\n\nclass CommandManager {\nprivate:\n    std::vector&lt;Command&gt; commands_;\n    std::vector&lt;Command&gt; undoCommands_;\n\npublic:\n    void execute(Command command, Command undoCommand) {\n        command();\n        commands_.push_back(std::move(command));\n        undoCommands_.push_back(std::move(undoCommand));\n    }\n\n    void undo() {\n        if (!undoCommands_.empty()) {\n            undoCommands_.back()();\n            undoCommands_.pop_back();\n            commands_.pop_back();\n        }\n    }\n};\n\n\/\/ \u4f7f\u7528\u4f8b\nclass Document {\nprivate:\n    std::string content_;\n\npublic:\n    void addText(const std::string&amp; text) {\n        content_ += text;\n    }\n\n    void removeLastCharacters(size_t count) {\n        if (count &lt;= content_.length()) {\n            content_.resize(content_.length() - count);\n        }\n    }\n\n    const std::string&amp; getContent() const { return content_; }\n};\n\n\/\/ \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u8003\u616e\u3057\u305f\u30b3\u30de\u30f3\u30c9\u306e\u5b9f\u88c5\nvoid documentExample() {\n    Document doc;\n    CommandManager manager;\n\n    \/\/ \u30c6\u30ad\u30b9\u30c8\u8ffd\u52a0\u30b3\u30de\u30f3\u30c9\n    std::string textToAdd = \"Hello\";\n    manager.execute(\n        [&amp;doc, text = textToAdd]() { doc.addText(text); },\n        [&amp;doc, length = textToAdd.length()]() { \n            doc.removeLastCharacters(length); \n        }\n    );\n}<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/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=\"\">\/\/ \u30e1\u30e2\u30ea\u30d7\u30fc\u30eb\u4ed8\u304d\u30d5\u30a1\u30af\u30c8\u30ea\u30fc\ntemplate&lt;typename T&gt;\nclass PooledFactory {\nprivate:\n    static constexpr size_t POOL_SIZE = 100;\n    std::array&lt;std::unique_ptr&lt;T&gt;, POOL_SIZE&gt; pool_;\n    std::vector&lt;size_t&gt; freeIndices_;\n\npublic:\n    PooledFactory() {\n        for (size_t i = 0; i &lt; POOL_SIZE; ++i) {\n            freeIndices_.push_back(i);\n        }\n    }\n\n    T* create() {\n        if (freeIndices_.empty()) {\n            return nullptr;  \/\/ \u30d7\u30fc\u30eb\u304c\u7a7a\u306e\u5834\u5408\n        }\n\n        size_t index = freeIndices_.back();\n        freeIndices_.pop_back();\n\n        if (!pool_[index]) {\n            pool_[index] = std::make_unique&lt;T&gt;();\n        }\n\n        return pool_[index].get();\n    }\n\n    void release(T* obj) {\n        auto it = std::find_if(pool_.begin(), pool_.end(),\n            [obj](const auto&amp; ptr) { return ptr.get() == obj; });\n\n        if (it != pool_.end()) {\n            size_t index = std::distance(pool_.begin(), it);\n            freeIndices_.push_back(index);\n        }\n    }\n};<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306f\u3001\u9069\u5207\u306b\u5b9f\u88c5\u3059\u308b\u3053\u3068\u3067\u3001\u30b3\u30fc\u30c9\u306e\u518d\u5229\u7528\u6027\u3001\u4fdd\u5b88\u6027\u3001\u305d\u3057\u3066\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u7279\u306b\u3001C++\u3067\u306f\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3084\u30b9\u30de\u30fc\u30c8\u30dd\u30a4\u30f3\u30bf\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u578b\u5b89\u5168\u6027\u3092\u4fdd\u3061\u306a\u304c\u3089\u52b9\u7387\u7684\u306a\u5b9f\u88c5\u304c\u53ef\u80fd\u3067\u3059\u3002\u30d1\u30bf\u30fc\u30f3\u306e\u9078\u629e\u6642\u306b\u306f\u3001\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u3084\u5b9f\u884c\u6642\u306e\u30aa\u30fc\u30d0\u30fc\u30d8\u30c3\u30c9\u3092\u8003\u616e\u3057\u3001\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u6700\u9069\u5316\u3092\u884c\u3046\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-15\">\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u30a8\u30e9\u30fc\u51e6\u7406<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-16\">\u4f8b\u5916\u51e6\u7406\u3092\u4f7f\u7528\u3057\u305f\u5805\u5b9f\u306a\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ab\u30b9\u30bf\u30e0\u4f8b\u5916\u30af\u30e9\u30b9\u306e\u8a2d\u8a08<\/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\u5e95\u4f8b\u5916\u30af\u30e9\u30b9\nclass ApplicationException : public std::exception {\nprivate:\n    std::string message_;\n\npublic:\n    explicit ApplicationException(std::string message)\n        : message_(std::move(message)) {}\n\n    const char* what() const noexcept override {\n        return message_.c_str();\n    }\n};\n\n\/\/ \u5177\u4f53\u7684\u306a\u4f8b\u5916\u30af\u30e9\u30b9\nclass DatabaseException : public ApplicationException {\npublic:\n    explicit DatabaseException(const std::string&amp; message)\n        : ApplicationException(\"Database Error: \" + message) {}\n};\n\nclass ValidationException : public ApplicationException {\npublic:\n    explicit ValidationException(const std::string&amp; message)\n        : ApplicationException(\"Validation Error: \" + message) {}\n};\n\n\/\/ \u4f8b\u5916\u3092\u4f7f\u7528\u3057\u305f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u306e\u4f8b\nclass Database {\npublic:\n    void connect(const std::string&amp; connectionString) {\n        if (connectionString.empty()) {\n            throw ValidationException(\"Connection string cannot be empty\");\n        }\n        \/\/ \u63a5\u7d9a\u51e6\u7406\n        if (\/* \u63a5\u7d9a\u5931\u6557 *\/) {\n            throw DatabaseException(\"Failed to connect to database\");\n        }\n    }\n};<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u968e\u5c64\u7684\u306a\u4f8b\u5916\u51e6\u7406<\/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 TransactionManager {\nprivate:\n    Database db_;\n    std::vector&lt;std::string&gt; logs_;\n\npublic:\n    void executeTransaction(const std::string&amp; query) {\n        try {\n            db_.connect(\"connection_string\");\n            \/\/ \u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u51e6\u7406\n            if (query.empty()) {\n                throw ValidationException(\"Query cannot be empty\");\n            }\n\n            try {\n                \/\/ \u30af\u30a8\u30ea\u5b9f\u884c\n                logs_.push_back(\"Query executed successfully\");\n            }\n            catch (const DatabaseException&amp; e) {\n                logs_.push_back(\"Query execution failed\");\n                throw; \/\/ \u4f8b\u5916\u3092\u518d\u30b9\u30ed\u30fc\n            }\n        }\n        catch (const ValidationException&amp; e) {\n            std::cerr &lt;&lt; \"Validation error: \" &lt;&lt; e.what() &lt;&lt; \"\\n\";\n            \/\/ \u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u30a8\u30e9\u30fc\u306e\u51e6\u7406\n        }\n        catch (const DatabaseException&amp; e) {\n            std::cerr &lt;&lt; \"Database error: \" &lt;&lt; e.what() &lt;&lt; \"\\n\";\n            \/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30a8\u30e9\u30fc\u306e\u51e6\u7406\n        }\n        catch (...) {\n            std::cerr &lt;&lt; \"Unknown error occurred\\n\";\n            throw; \/\/ \u672a\u77e5\u306e\u4f8b\u5916\u306f\u4e0a\u4f4d\u5c64\u306b\u4f1d\u64ad\n        }\n    }\n};<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-17\">RAII\u30d1\u30bf\u30fc\u30f3\u306b\u3088\u308b\u5b89\u5168\u306a\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>RAII\u30af\u30e9\u30b9\u306e\u5b9f\u88c5<\/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 FileHandle {\nprivate:\n    FILE* file_;\n\npublic:\n    explicit FileHandle(const char* filename, const char* mode) \n        : file_(std::fopen(filename, mode)) {\n        if (!file_) {\n            throw std::runtime_error(\"Failed to open file\");\n        }\n    }\n\n    ~FileHandle() {\n        if (file_) {\n            std::fclose(file_);\n        }\n    }\n\n    \/\/ \u30b3\u30d4\u30fc\u7981\u6b62\n    FileHandle(const FileHandle&amp;) = delete;\n    FileHandle&amp; operator=(const FileHandle&amp;) = delete;\n\n    \/\/ \u30e0\u30fc\u30d6\u53ef\u80fd\n    FileHandle(FileHandle&amp;&amp; other) noexcept \n        : file_(other.file_) {\n        other.file_ = nullptr;\n    }\n\n    FileHandle&amp; operator=(FileHandle&amp;&amp; other) noexcept {\n        if (this != &amp;other) {\n            if (file_) {\n                std::fclose(file_);\n            }\n            file_ = other.file_;\n            other.file_ = nullptr;\n        }\n        return *this;\n    }\n\n    \/\/ \u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c\u30e1\u30bd\u30c3\u30c9\n    void write(const std::string&amp; data) {\n        if (std::fputs(data.c_str(), file_) == EOF) {\n            throw std::runtime_error(\"Failed to write to file\");\n        }\n    }\n};<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30b9\u30b3\u30fc\u30d7\u30d9\u30fc\u30b9\u306e\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406<\/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 MutexLock {\nprivate:\n    std::mutex&amp; mutex_;\n\npublic:\n    explicit MutexLock(std::mutex&amp; mutex) \n        : mutex_(mutex) {\n        mutex_.lock();\n    }\n\n    ~MutexLock() {\n        mutex_.unlock();\n    }\n\n    \/\/ \u30b3\u30d4\u30fc\u7981\u6b62\n    MutexLock(const MutexLock&amp;) = delete;\n    MutexLock&amp; operator=(const MutexLock&amp;) = delete;\n};\n\nclass ThreadSafeCounter {\nprivate:\n    std::mutex mutex_;\n    int count_ = 0;\n\npublic:\n    void increment() {\n        MutexLock lock(mutex_);  \/\/ \u30b9\u30b3\u30fc\u30d7\u30d9\u30fc\u30b9\u306e\u30ed\u30c3\u30af\n        ++count_;\n        \/\/ \u30ed\u30c3\u30af\u306f\u81ea\u52d5\u7684\u306b\u89e3\u653e\u3055\u308c\u308b\n    }\n\n    int getValue() const {\n        MutexLock lock(mutex_);\n        return count_;\n    }\n};<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u4f8b\u5916\u5b89\u5168\u306a\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406\u306e\u5b9f\u88c5\u4f8b<\/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 ResourceManager {\nprivate:\n    std::vector&lt;std::unique_ptr&lt;Resource&gt;&gt; resources_;\n    std::mutex mutex_;\n\npublic:\n    void addResource(std::unique_ptr&lt;Resource&gt; resource) {\n        MutexLock lock(mutex_);\n\n        if (!resource) {\n            throw ValidationException(\"Resource cannot be null\");\n        }\n\n        try {\n            resource-&gt;initialize();  \/\/ \u4f8b\u5916\u3092\u6295\u3052\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\n            resources_.push_back(std::move(resource));\n        }\n        catch (const std::exception&amp; e) {\n            \/\/ \u30ea\u30bd\u30fc\u30b9\u306e\u521d\u671f\u5316\u306b\u5931\u6557\n            \/\/ unique_ptr\u3068MutexLock\u306b\u3088\u308a\u3001\u30ea\u30bd\u30fc\u30b9\u306f\u9069\u5207\u306b\u89e3\u653e\u3055\u308c\u308b\n            throw ResourceException(\n                std::string(\"Failed to initialize resource: \") + e.what()\n            );\n        }\n    }\n\n    void processResources() {\n        MutexLock lock(mutex_);\n\n        for (const auto&amp; resource : resources_) {\n            try {\n                resource-&gt;process();\n            }\n            catch (const std::exception&amp; e) {\n                \/\/ \u30a8\u30e9\u30fc\u3092\u30ed\u30b0\u306b\u8a18\u9332\u3059\u308b\u304c\u3001\u4ed6\u306e\u30ea\u30bd\u30fc\u30b9\u306e\u51e6\u7406\u306f\u7d99\u7d9a\n                std::cerr &lt;&lt; \"Error processing resource: \" \n                          &lt;&lt; e.what() &lt;&lt; \"\\n\";\n            }\n        }\n    }\n};<\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u7684\u306a\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406<\/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=\"\">template&lt;typename T&gt;\nclass TransactionalResource {\nprivate:\n    T currentState_;\n    T previousState_;\n    bool modified_ = false;\n\npublic:\n    explicit TransactionalResource(T initial)\n        : currentState_(std::move(initial))\n        , previousState_(currentState_) {}\n\n    void modify(const std::function&lt;void(T&amp;)&gt;&amp; operation) {\n        previousState_ = currentState_;  \/\/ \u72b6\u614b\u3092\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\n        modified_ = true;\n\n        try {\n            operation(currentState_);  \/\/ \u5909\u66f4\u3092\u9069\u7528\n        }\n        catch (...) {\n            rollback();  \/\/ \u30a8\u30e9\u30fc\u6642\u306f\u5143\u306e\u72b6\u614b\u306b\u623b\u3059\n            throw;\n        }\n    }\n\n    void commit() {\n        if (modified_) {\n            previousState_ = currentState_;\n            modified_ = false;\n        }\n    }\n\n    void rollback() {\n        if (modified_) {\n            currentState_ = previousState_;\n            modified_ = false;\n        }\n    }\n\n    const T&amp; getState() const {\n        return currentState_;\n    }\n};<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5b9f\u88c5\u4f8b\u306f\u3001C++\u306b\u304a\u3051\u308b\u30a8\u30e9\u30fc\u51e6\u7406\u3068\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406\u306e\u57fa\u672c\u7684\u306a\u30d1\u30bf\u30fc\u30f3\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002RAII\u30d1\u30bf\u30fc\u30f3\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u4f8b\u5916\u304c\u767a\u751f\u3057\u305f\u5834\u5408\u3067\u3082\u30ea\u30bd\u30fc\u30b9\u306e\u78ba\u5b9f\u306a\u89e3\u653e\u3092\u4fdd\u8a3c\u3057\u3001\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u306a\u3069\u306e\u554f\u984c\u3092\u9632\u3050\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u307e\u305f\u3001\u9069\u5207\u306a\u4f8b\u5916\u51e6\u7406\u3092\u5b9f\u88c5\u3059\u308b\u3053\u3068\u3067\u3001\u30a8\u30e9\u30fc\u306e\u767a\u751f\u3092\u9069\u5207\u306b\u691c\u77e5\u3057\u3001\u30b7\u30b9\u30c6\u30e0\u306e\u5805\u7262\u6027\u3092\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-18\">\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-19\">\u30b3\u30fc\u30c9\u306e\u4fdd\u5b88\u6027\u3092\u9ad8\u3081\u308b\u30af\u30e9\u30b9\u8a2d\u8a08\u306e\u539f\u5247<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5358\u4e00\u8cac\u4efb\u306e\u539f\u5247\uff08SRP\uff09\u306e\u5b9f\u88c5<\/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=\"\">\/\/ \u60aa\u3044\u4f8b\uff1a\u8907\u6570\u306e\u8cac\u4efb\u3092\u6301\u3064\u30af\u30e9\u30b9\nclass UserManager {\npublic:\n    void createUser(const std::string&amp; name) { \/* ... *\/ }\n    void saveToDatabase() { \/* ... *\/ }\n    void sendEmail(const std::string&amp; message) { \/* ... *\/ }\n    void generateReport() { \/* ... *\/ }\n};\n\n\/\/ \u826f\u3044\u4f8b\uff1a\u8cac\u4efb\u306e\u5206\u96e2\nclass User {\nprivate:\n    std::string name_;\n    std::string email_;\n\npublic:\n    User(std::string name, std::string email)\n        : name_(std::move(name))\n        , email_(std::move(email)) {}\n\n    const std::string&amp; getName() const { return name_; }\n    const std::string&amp; getEmail() const { return email_; }\n};\n\nclass UserRepository {\npublic:\n    void save(const User&amp; user) { \/* \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c *\/ }\n    User load(const std::string&amp; userId) { \/* ... *\/ }\n};\n\nclass EmailService {\npublic:\n    void sendEmail(const std::string&amp; to, const std::string&amp; message) {\n        \/* \u30e1\u30fc\u30eb\u9001\u4fe1\u51e6\u7406 *\/\n    }\n};\n\nclass ReportGenerator {\npublic:\n    void generateUserReport(const User&amp; user) { \/* ... *\/ }\n};<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u4f9d\u5b58\u6027\u6ce8\u5165\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 ILogger {\npublic:\n    virtual ~ILogger() = default;\n    virtual void log(const std::string&amp; message) = 0;\n};\n\nclass ConsoleLogger : public ILogger {\npublic:\n    void log(const std::string&amp; message) override {\n        std::cout &lt;&lt; \"Log: \" &lt;&lt; message &lt;&lt; std::endl;\n    }\n};\n\nclass FileLogger : public ILogger {\npublic:\n    void log(const std::string&amp; message) override {\n        \/\/ \u30d5\u30a1\u30a4\u30eb\u3078\u306e\u30ed\u30b0\u51fa\u529b\n    }\n};\n\nclass UserService {\nprivate:\n    std::shared_ptr&lt;ILogger&gt; logger_;\n    std::shared_ptr&lt;UserRepository&gt; repository_;\n\npublic:\n    UserService(std::shared_ptr&lt;ILogger&gt; logger,\n                std::shared_ptr&lt;UserRepository&gt; repository)\n        : logger_(std::move(logger))\n        , repository_(std::move(repository)) {}\n\n    void createUser(const std::string&amp; name, const std::string&amp; email) {\n        logger_-&gt;log(\"Creating new user: \" + name);\n        User user(name, email);\n        repository_-&gt;save(user);\n    }\n};<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u5206\u96e2\u306e\u539f\u5247<\/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=\"\">\/\/ \u5927\u304d\u3059\u304e\u308b\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\uff08\u907f\u3051\u308b\u3079\u304d\uff09\nclass IDevice {\npublic:\n    virtual void print() = 0;\n    virtual void scan() = 0;\n    virtual void fax() = 0;\n    virtual void copy() = 0;\n};\n\n\/\/ \u5206\u96e2\u3055\u308c\u305f\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\uff08\u63a8\u5968\uff09\nclass IPrinter {\npublic:\n    virtual ~IPrinter() = default;\n    virtual void print() = 0;\n};\n\nclass IScanner {\npublic:\n    virtual ~IScanner() = default;\n    virtual void scan() = 0;\n};\n\nclass IFax {\npublic:\n    virtual ~IFax() = default;\n    virtual void fax() = 0;\n};\n\n\/\/ \u5fc5\u8981\u306a\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306e\u307f\u3092\u5b9f\u88c5\nclass SimplePrinter : public IPrinter {\npublic:\n    void print() override { \/* \u5370\u5237\u51e6\u7406 *\/ }\n};\n\nclass MultiFunctionPrinter : public IPrinter, public IScanner, public IFax {\npublic:\n    void print() override { \/* \u5370\u5237\u51e6\u7406 *\/ }\n    void scan() override { \/* \u30b9\u30ad\u30e3\u30f3\u51e6\u7406 *\/ }\n    void fax() override { \/* FAX\u51e6\u7406 *\/ }\n};<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-20\">\u30c6\u30b9\u30bf\u30d3\u30ea\u30c6\u30a3\u3092\u8003\u616e\u3057\u305f\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u8a2d\u8a08<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e2\u30c3\u30af\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u4f5c\u6210\u3068\u30c6\u30b9\u30c8<\/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\u30c8\u53ef\u80fd\u306a\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u8a2d\u8a08\nclass IPaymentGateway {\npublic:\n    virtual ~IPaymentGateway() = default;\n    virtual bool processPayment(double amount) = 0;\n};\n\nclass PaymentProcessor {\nprivate:\n    std::shared_ptr&lt;IPaymentGateway&gt; gateway_;\n\npublic:\n    explicit PaymentProcessor(std::shared_ptr&lt;IPaymentGateway&gt; gateway)\n        : gateway_(std::move(gateway)) {}\n\n    bool makePayment(double amount) {\n        return gateway_-&gt;processPayment(amount);\n    }\n};\n\n\/\/ \u30e2\u30c3\u30af\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\nclass MockPaymentGateway : public IPaymentGateway {\npublic:\n    bool processPayment(double amount) override {\n        lastAmount_ = amount;\n        return shouldSucceed_;\n    }\n\n    void setShouldSucceed(bool value) { shouldSucceed_ = value; }\n    double getLastAmount() const { return lastAmount_; }\n\nprivate:\n    bool shouldSucceed_ = true;\n    double lastAmount_ = 0.0;\n};\n\n\/\/ \u30c6\u30b9\u30c8\u30b3\u30fc\u30c9\nvoid testPaymentProcessor() {\n    auto mockGateway = std::make_shared&lt;MockPaymentGateway&gt;();\n    PaymentProcessor processor(mockGateway);\n\n    \/\/ \u6210\u529f\u30b1\u30fc\u30b9\u306e\u30c6\u30b9\u30c8\n    assert(processor.makePayment(100.0));\n    assert(mockGateway-&gt;getLastAmount() == 100.0);\n\n    \/\/ \u5931\u6557\u30b1\u30fc\u30b9\u306e\u30c6\u30b9\u30c8\n    mockGateway-&gt;setShouldSucceed(false);\n    assert(!processor.makePayment(50.0));\n    assert(mockGateway-&gt;getLastAmount() == 50.0);\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u4f9d\u5b58\u95a2\u4fc2\u306e\u5206\u96e2\u3068\u30c6\u30b9\u30c8\u5bb9\u6613\u6027<\/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=\"\">\/\/ \u8a2d\u5b9a\u306e\u62bd\u8c61\u5316\nclass IConfiguration {\npublic:\n    virtual ~IConfiguration() = default;\n    virtual std::string getDatabaseUrl() const = 0;\n    virtual int getTimeout() const = 0;\n};\n\nclass DatabaseConnection {\nprivate:\n    std::shared_ptr&lt;IConfiguration&gt; config_;\n    std::shared_ptr&lt;ILogger&gt; logger_;\n\npublic:\n    DatabaseConnection(std::shared_ptr&lt;IConfiguration&gt; config,\n                      std::shared_ptr&lt;ILogger&gt; logger)\n        : config_(std::move(config))\n        , logger_(std::move(logger)) {}\n\n    bool connect() {\n        auto url = config_-&gt;getDatabaseUrl();\n        auto timeout = config_-&gt;getTimeout();\n        logger_-&gt;log(\"Connecting to: \" + url);\n        return true; \/\/ \u5b9f\u969b\u306e\u63a5\u7d9a\u51e6\u7406\n    }\n};\n\n\/\/ \u30c6\u30b9\u30c8\u7528\u306e\u8a2d\u5b9a\nclass MockConfiguration : public IConfiguration {\npublic:\n    std::string getDatabaseUrl() const override {\n        return \"mock:\/\/database\";\n    }\n\n    int getTimeout() const override {\n        return 100;\n    }\n};\n\n\/\/ \u30c6\u30b9\u30c8\u7528\u306e\u30ed\u30ac\u30fc\nclass MockLogger : public ILogger {\npublic:\n    void log(const std::string&amp; message) override {\n        messages_.push_back(message);\n    }\n\n    const std::vector&lt;std::string&gt;&amp; getMessages() const {\n        return messages_;\n    }\n\nprivate:\n    std::vector&lt;std::string&gt; messages_;\n};<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30c6\u30b9\u30c8\u99c6\u52d5\u958b\u767a\uff08TDD\uff09\u306e\u30b5\u30dd\u30fc\u30c8<\/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 Calculator {\npublic:\n    virtual ~Calculator() = default;\n\n    virtual int add(int a, int b) {\n        return a + b;\n    }\n\n    virtual int subtract(int a, int b) {\n        return a - b;\n    }\n\n    virtual int multiply(int a, int b) {\n        return a * b;\n    }\n\n    virtual double divide(int a, int b) {\n        if (b == 0) {\n            throw std::invalid_argument(\"Division by zero\");\n        }\n        return static_cast&lt;double&gt;(a) \/ b;\n    }\n};\n\n\/\/ \u30c6\u30b9\u30c8\u30b1\u30fc\u30b9\nvoid testCalculator() {\n    Calculator calc;\n\n    \/\/ \u52a0\u7b97\u306e\u30c6\u30b9\u30c8\n    assert(calc.add(2, 3) == 5);\n    assert(calc.add(-1, 1) == 0);\n\n    \/\/ \u6e1b\u7b97\u306e\u30c6\u30b9\u30c8\n    assert(calc.subtract(5, 3) == 2);\n    assert(calc.subtract(1, 1) == 0);\n\n    \/\/ \u4e57\u7b97\u306e\u30c6\u30b9\u30c8\n    assert(calc.multiply(2, 3) == 6);\n    assert(calc.multiply(-2, 3) == -6);\n\n    \/\/ \u9664\u7b97\u306e\u30c6\u30b9\u30c8\n    assert(calc.divide(6, 2) == 3.0);\n    assert(calc.divide(5, 2) == 2.5);\n\n    \/\/ \u4f8b\u5916\u306e\u30c6\u30b9\u30c8\n    try {\n        calc.divide(1, 0);\n        assert(false);  \/\/ \u3053\u306e\u884c\u306b\u5230\u9054\u3057\u3066\u306f\u3044\u3051\u306a\u3044\n    } catch (const std::invalid_argument&amp;) {\n        \/\/ \u671f\u5f85\u901a\u308a\u306e\u4f8b\u5916\u304c\u767a\u751f\n    }\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5b9f\u88c5\u4f8b\u306f\u3001C++\u3067\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002\u5358\u4e00\u8cac\u4efb\u306e\u539f\u5247\u3001\u4f9d\u5b58\u6027\u6ce8\u5165\u3001\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u5206\u96e2\u306a\u3069\u306e\u8a2d\u8a08\u539f\u5247\u3092\u9069\u5207\u306b\u9069\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u4fdd\u5b88\u6027\u304c\u9ad8\u304f\u3001\u30c6\u30b9\u30c8\u304c\u5bb9\u6613\u306a\u30b3\u30fc\u30c9\u3092\u4f5c\u6210\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u307e\u305f\u3001\u30e2\u30c3\u30af\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3084\u30c6\u30b9\u30c8\u99c6\u52d5\u958b\u767a\u306e\u624b\u6cd5\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u4fe1\u983c\u6027\u306e\u9ad8\u3044\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306e\u958b\u767a\u304c\u53ef\u80fd\u306b\u306a\u308a\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-2129","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\/2129","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=2129"}],"version-history":[{"count":1,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2129\/revisions"}],"predecessor-version":[{"id":2130,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2129\/revisions\/2130"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2129"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2129"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2129"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}