{"id":3796,"date":"2025-05-10T00:07:50","date_gmt":"2025-05-09T16:07:50","guid":{"rendered":"https:\/\/www.haruhi.fans\/?p=3796"},"modified":"2025-06-08T21:44:00","modified_gmt":"2025-06-08T13:44:00","slug":"effective-c","status":"publish","type":"post","link":"https:\/\/www.haruhi.fans\/?p=3796","title":{"rendered":"Effective C++"},"content":{"rendered":"\n<p>\u4f20\u4e16\u7ecf\u5178\uff1aEffective cpp\uff0c\u62dc\u8bfb\u5b66\u4e60<\/p>\n\n\n\n<p>\u672c\u4e66\u76f8\u8f83\u4e8ecpp primer\u90a3\u672c\u4e66\uff0c\u66f4\u591a\u7684\u662f\u4e00\u4e9b\u7406\u5ff5\u4e0a\u7684\u5185\u5bb9\u3002\u4e0d\u4f1a\u6d89\u53ca\u5230\u57fa\u672c\u7684\u8bed\u6cd5\uff0c\u56e0\u4e3a\u9ed8\u8ba4\u4f60\u5df2\u7ecf\u638c\u63e1\u4e86\u8fd9\u4e9b\u90e8\u5206\u3002\u5982\u679c\u5bf9\u4e8eC++\u8fd8\u4e0d\u592a\u4e86\u89e3\u7684\uff0c\u6bd4\u5982inline\uff0cSTL\u539f\u7406\u7b97\u6cd5\uff0cTMP\uff0cRAII\u548c\u7f16\u8bd1\u8fc7\u7a0b\u7b49\u4e0d\u592a\u4e86\u89e3\u7684\uff0c\u8bf7\u5148\u79fb\u6b65C++ primer\u5b66\u4f1a\/\u4e86\u89e3\u7edd\u5927\u90e8\u5206\u542b\u4e49\u6216\u8bed\u6cd5\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u8ba9\u81ea\u5df1\u719f\u6089C++<\/h2>\n\n\n\n<p>\u8fd9\u90e8\u5206\u4e3a\u4e00\u4e9b\u57fa\u7840\u7684\u6027\u8d28\uff0c\u672c\u8d28\u662f\u8ba9\u4e0d\u540c\u7f16\u7a0b\u80cc\u666f\u7684\u4eba\u90fd\u4e86\u89e3C++\u5230\u5e95\u662f\u600e\u6837\u7684\u3002\u8fd9\u6837\u719f\u6089C++\u7684\u505a\u4e8b\u98ce\u683c\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u89c6C++\u4e3a\u4e00\u4e2a\u8bed\u8a00\u8054\u90a6<\/h3>\n\n\n\n<p>\u73b0\u4ee3cpp\u7531\u591a\u4e2a\u90e8\u5206\u7ec4\u6210\uff0c\u5df2\u7ecf\u4e0d\u53ef\u4ee5\u8ba4\u4e3a\u662f\u4e00\u79cd\u5355\u4e00\u7edf\u4e00\u7684\u8bed\u8a00\uff0c\u800c\u662f\u7531\u591a\u4e2a\u5b50\u8bed\u8a00\u7ec4\u6210\u3002\u5177\u4f53\u6765\u8bf4\uff0c\u6709\u517c\u5bb9c\u7684\u90e8\u5206\uff0c\u6bd4\u5982\u6307\u9488\u7ed3\u6784\u4f53\u4e4b\u7c7b\u7684\uff1b\u6709\u6838\u5fc3\u7279\u6027\u9762\u5411\u5bf9\u8c61\uff0c\u5c01\u88c5\u7ee7\u627f\u591a\u6001\uff1b\u6709\u6a21\u7248\u5bf9\u8c61\u652f\u6301\u9ad8\u590d\u7528\uff1b\u4e5f\u6709STL\u5bb9\u5668\uff0c\u8fed\u4ee3\u5668\u4e4b\u7c7b\u5c01\u88c5\u6210\u719f\u7684\u6a21\u7248\u7c7b\uff1b\u5f53\u7136\u8fd8\u6709\u5982\u4eca\u73b0\u4ee3Cpp\u4e00\u4e9b\u7279\u6027\u3002<\/p>\n\n\n\n<p>\u56e0\u6b64\uff0c<strong>Cpp\u4e0d\u5b58\u5728\u4e00\u79cd\u7edf\u4e00\u7684\u7f16\u7a0b\u5b88\u5219<\/strong>\uff0c\u6211\u4eec\u8981\u89c6\u81ea\u5df1\u4f7f\u7528cpp\u7684\u54ea\u4e00\u90e8\u5206\u53bb\u6539\u53d8\uff0c\u5177\u4f53\u6765\u8bf4\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>C\u8bed\u8a00\u90e8\u5206\uff1a\u9700\u8981\u6ce8\u610f\u5e95\u5c42\u7ec6\u8282\uff0c\u5185\u5b58\u7ba1\u7406\u548c\u6307\u9488\u90e8\u5206\u7684\u6b63\u786e\u4f7f\u7528\u3002<\/li>\n\n\n\n<li>\u9762\u5411\u5bf9\u8c61\u90e8\u5206\uff1a\u5408\u7406\u7ee7\u627f\u5c01\u88c5\uff0c\u9759\u6001\u52a8\u6001\u7ee7\u627f\u7684\u5408\u7406\u4f7f\u7528\uff0c\u8bbe\u8ba1\u6a21\u5f0f\u7684\u8fd0\u7528\u3002<\/li>\n\n\n\n<li>\u6a21\u677f\u90e8\u5206\uff1a\u4e5f\u662f\u6cdb\u578b\u7f16\u7a0b\u90e8\u5206\uff0c\u9700\u8981\u7406\u89e3\u7f16\u8bd1\u671f\u884c\u4e3a\u8f6c\u5316\u539f\u7406\u7b49\u3002<\/li>\n\n\n\n<li>STL\u90e8\u5206\uff1a\u5bb9\u5668\u8fed\u4ee3\u5668\u7b97\u6cd5\u3002\u719f\u6089\u9009\u62e9\uff0c\u4e86\u89e3\u5e95\u5c42\u539f\u7406\u5e76\u9009\u62e9\u6700\u5408\u9002\u7684\u8fd0\u7528\u3002<\/li>\n\n\n\n<li>\u73b0\u4ee3\u90e8\u5206\uff1a\u667a\u80fd\u6307\u9488\uff0cRAII\uff0c\u79fb\u52a8\u8bed\u4e49\u7b49\u6982\u5ff5\u6765\u7f16\u5199\u66f4\u597d\u7684\u4ee3\u7801\u3002<\/li>\n<\/ul>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-8c9aba1a58612bfcf9f36d81d6c29974\">\u603b\u7ed3\u6765\u8bf4\uff1a<\/p>\n\n\n\n<p class=\"has-text-align-left has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-31861297893a73e8ab0b4b9f39795871\" style=\"font-size:24px\"><strong>\u9ad8\u6548\u7f16\u7a0b\u5b88\u5219\u89c6\u60c5\u51b5\u800c\u5b9a\uff0c\u53d6\u51b3\u4e8e\u4f7f\u7528\u7684\u662fC++\u54ea\u4e00\u90e8\u5206\u3002<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u5c3d\u91cf\u4ee5const\uff0cenum\uff0cinline\u66ff\u6362#define<\/h3>\n\n\n\n<pre class=\"wp-block-verse has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-e070526721a2f3ec773c40cee080cb66\" style=\"font-size:24px\">\u6216\u8005\u8bf4\uff1a<strong>\u4f18\u5148\u9009\u62e9\u7f16\u8bd1\u5668\u800c\u4e0d\u662f\u9884\u5904\u7406\u5668<\/strong><\/pre>\n\n\n\n<p>\u521d\u770b\u6709\u4e86\u7591\u60d1\uff0c\u56e0\u4e3a\u4e2a\u4eba\u7406\u89e3\u6765\u770b\uff0cdefine\u5728\u9884\u5904\u7406\u9636\u6bb5\u66ff\u6362\uff0c\u5e94\u8be5\u662f\u8981\u6bd4\u7f16\u8bd1\u5668\u4e43\u81f3\u8fd0\u884c\u671f\u624d\u66ff\u6362\u7684\u6570\u636e\u662f\u8981\u9ad8\u6548\u4e00\u4e9b\u7684\u3002<\/p>\n\n\n\n<p>\u5b9e\u9645\u800c\u8a00\uff0c\u7531\u4e8e\u5728\u9884\u5904\u7406\u9636\u6bb5\u5904\u7406\u5c31\u76f4\u63a5\u6587\u672c\u66ff\u6362\u4e86\uff0c\u7f16\u8bd1\u5668\u5c31\u4e0d\u77e5\u9053\u539f\u903b\u8f91\u662f\u4ec0\u4e48\u3002\u5982\u679c\u6b64\u65f6\u62a5\u9519\uff0c\u62a5\u7684\u9519\u4e5f\u53ea\u662f\u66ff\u6362\u540e\u7684\u6587\u672c\uff0c\u5f88\u96be\u627e\u5230\u6839\u6e90\u6240\u5728\u3002\u5982\u679c\u8fd9\u4e2adefine\u5199\u5230\u5176\u4ed6\u6587\u4ef6\uff0c\u627e\u95ee\u9898\u5c31\u53d8\u5f97\u6781\u4e3a\u56f0\u96be\u3002<\/p>\n\n\n\n<p>\u56e0\u6b64\uff0c\u4e00\u822c\u9700\u8981\u7528const\u66ff\u4ee3\u5b8f\uff08C++11\u540e\u6709\u4e86\u7f16\u8bd1\u65f6\u5e38\u91cf constexpr\uff09<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u5bf9\u4e8e\u4e00\u822c\u6570\u636e\u7c7b\u578b\nconst double AspectRatio = 1.653;\n\n\/\/ \u5bf9\u4e8e\u5b57\u7b26\u4e32\nconst char * const name = \"djs\"; \/\/ \u9700\u8981\u540c\u65f6\u786e\u4fdd\u6307\u5411\u548c\u5185\u5bb9\u4e0d\u53ef\u53d8\u5316\ncosnt std::string name(\"djs\");   \/\/ \u6216\u4f7f\u7528string\uff0c\u53ea\u7528\u4e00\u4e2aconst<\/code><\/pre>\n\n\n\n<p>\u5bf9\u4e8e\u7c7b\u7684\u4e13\u5c5e\u5e38\u91cf\uff0c\u8981\u4f7f\u7528static const\uff1bdefine\u5b8f\u7684\u4f5c\u7528\u57df\u65e0\u6cd5\u53ea\u9650\u5b9a\u5728\u4e00\u4e2a\u7c7b\u5185\u90e8\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class GamePlayer{\n    static const int NumTurns = 5;    \/\/ \u5e38\u91cf\u58f0\u660e\uff08\u7f16\u8bd1\u65f6\u5e38\u91cf\uff09\n    int scores&#91;NumTurns];             \/\/ \u5e38\u91cf\u4f7f\u7528\uff08\u6570\u7ec4\u5927\u5c0f\u5fc5\u987b\u4fdd\u8bc1\u4e3a\u7f16\u8bd1\u5668\u5e38\u91cf\uff09\n}<\/code><\/pre>\n\n\n\n<details class=\"wp-block-details has-medium-font-size is-layout-flow wp-block-details-is-layout-flow\"><summary>\u63d0\u4e00\u5634\u8fd9\u91cc\u7684static\u95ee\u9898<\/summary>\n<p>\u6309\u7167C++\u7684\u8981\u6c42\uff0c<strong>\u5bf9\u6240\u4f7f\u7528\u7684\u4e1c\u897f\u90fd\u9700\u8981\u63d0\u4f9b\u4e00\u4e2a\u5b9a\u4e49\u5f0f<\/strong>\u3002\u800c\u5bf9\u4e8e\u9759\u6001\u6210\u5458\u5bf9\u8c61\uff0c\u9700\u8981\u5728\u7c7b\u5916\u63d0\u4f9b\u5b9a\u4e49\uff0c\u7c7b\u5185\u53ea\u53ef\u4ee5\u58f0\u660e\u3002\u5047\u8bbe\u53ea\u6709\u58f0\u660e\uff0c\u867d\u7136\u7f16\u8bd1\u53ef\u4ee5\u8fc7\uff0c\u4f46\u662f\u5982\u679c\u4f7f\u7528\u5c31\u4f1a\u62a5\u9519undefined reference<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class GamePlayer {\npublic:\n    static string s = \"12346\"; \/\/ \u76f4\u63a5\u62a5\u9519\uff0cstatic \u6570\u636e\u6210\u5458 s \u4e0d\u80fd\u6709\u7c7b\u5185\u521d\u59cb\u503c\u8bbe\u5b9a\u9879\n};<\/code><\/pre>\n\n\n\n<p>\u6b63\u786e\u7684\u505a\u6cd5\u662f\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class GamePlayer {\npublic:\n    static string s ; \/\/  \u53ea\u5728\u6b64\u5904\u58f0\u660e\n};\nstring GamePlayer::s = \"123456\";<\/code><\/pre>\n\n\n\n<p>\u6240\u4ee5\u4e3a\u4ec0\u4e48\u4e0d\u50cf\u5176\u4ed6\u7c7b\u5185\u6210\u5458\uff0c\u53ef\u4ee5\u7c7b\u5185\u521d\u59cb\u5316\u5462\uff1f<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6839\u636e\u8bbe\u8ba1\u7406\u5ff5\uff0c\u9759\u6001\u6210\u5458\u5bf9\u4e8e\u6240\u6709\u7c7b\u5b9e\u4f8b\u5316\u5bf9\u8c61\u90fd\u662f\u53ea\u6709\u4e00\u4efd\u7684\uff0c\u4e0d\u5c5e\u4e8e\u4efb\u4f55\u4e00\u4e2a\u5bf9\u8c61\u3002\u5bf9\u4e8e\u6bcf\u4e00\u4e2a\u5bf9\u8c61\uff0c\u53ea\u662f\u62e5\u6709\u4e86\u4f7f\u7528\u7684\u6743\u5229\uff0c\u800c\u975e\u72ec\u5360\u3002\u56e0\u6b64\u53ea\u9700\u8981\u58f0\u660e\u4e00\u4e0b\u5373\u53ef\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u90a3\u95ee\u9898\u53c8\u6765\u4e86\uff0c\u4e3a\u4ec0\u4e48\u5bf9\u4e8e\u4e0a\u9762static const int NumTurns = 5;\u7684\u60c5\u51b5\u4e0d\u4f1a\u62a5\u9519\uff1f<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>C++\u5bf9\u4e8e\u7c7b\u4e13\u7528\u7684\u9759\u6001\u6574\u6570\u7c7b\u578b\uff08\u4f8b\u5982&nbsp;<code>int<\/code>,&nbsp;<code>char<\/code>,&nbsp;<code>bool<\/code>\uff09\uff0c\u7f16\u8bd1\u5668\u505a\u4e86\u4e13\u95e8\u7684\u4f18\u5316\u3002C++11\u6269\u5c55\u5230\u6574\u4e2a\u7f16\u8bd1\u671f\u5e38\u91cf\u3002<\/li>\n\n\n\n<li>\u5177\u4f53\u884c\u4e3a\u662f\uff1a\u7f16\u8bd1\u5668\u4f1a\u5728\u7f16\u8bd1\u9636\u6bb5\u76f4\u63a5\u5c06\u5e38\u91cf\u7684\u503c\u66ff\u6362\u5230\u4f7f\u7528\u5b83\u7684\u5730\u65b9\uff0c\u800c\u4e0d\u662f\u5728\u8fd0\u884c\u65f6\u901a\u8fc7\u53d8\u91cf\u67e5\u627e\uff0c\u4e5f\u79f0\u4e4b\u4e3a<strong>\u5e38\u91cf\u6298\u53e0\u4f18\u5316<\/strong>\u3002\n<ul class=\"wp-block-list\">\n<li>\u4f18\u5316\u7ed3\u679c\u5982\uff1amov eax, 5 ; \/\/\u5c06\u503c 5 \u76f4\u63a5\u52a0\u8f7d\u5230\u5bc4\u5b58\u5668 eax \u4e2d<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u90a3\u4e48\u663e\u7136\uff0c\u6b64\u65f6\u662f\u6ca1\u6709\u5730\u5740\u7684\uff08\u7c7b\u4f3c\u4e8e\u53f3\u503c\uff09\u3002\u5982\u679c\u4f60\u5bf9\u8fd9\u79cd\u53ea\u6709\u58f0\u660e\u7684\u9759\u6001\u5e38\u91cf\u53d6\u5730\u5740\u5c31\u4f1a\u62a5\u9519\u3002<\/li>\n<\/ul>\n<\/details>\n\n\n\n<p>\u8fd9\u91cc\u4e5f\u53ef\u4ee5\u7528enum\u7c7b\u578b\uff0c\u7b80\u6d01\u4f18\u96c5\u4e00\u70b9\u89e3\u51b3\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class GamePlayer{\n    enum { NumTurns = 5; }; \/\/\u4e0d\u53ef\u53d6\u5730\u5740\n    int scores&#91;NumTurns];             \n}<\/code><\/pre>\n\n\n\n<p>\u679a\u4e3e\u66f4\u50cfdefine \uff0c\u56e0\u4e3a\u4e0d\u53ef\u4ee5\u53d6\u5730\u5740\uff08\u4e2a\u4eba\u611f\u89c9\u5b9e\u73b0\u539f\u7406\u4e3a\u7f16\u8bd1\u65f6\u5e38\u91cf\uff09\u8fd9\u6837\u4e5f\u907f\u514d\u4e86\u6f5c\u5728\u7684\u88ab\u6307\u5411\u7684\u95ee\u9898\u3002<\/p>\n\n\n\n<p>\u800c\u5bf9\u4e8edefine\u5b9a\u4e49\u5b8f\u51fd\u6570\uff08C\u91cc\u6ca1\u5c11\u5e72\uff09\uff0c\u5c3d\u7ba1\u4e0d\u4f1a\u9020\u6210\u989d\u5916\u7684\u51fd\u6570\u8c03\u7528\u5f00\u652f\uff08\u56e0\u4e3a\u90fd\u76f4\u63a5\u66ff\u6362\u5230\u6b63\u786e\u4f4d\u7f6e\u4e86\uff09\uff0c\u4f46\u4f1a\u5f15\u5165\u4e0d\u5c11\u9ebb\u70e6\uff0c\u4f8b\u5982<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># define CALL_WITH_MAX(a,b) f((a) &gt; (b) ? (a) : (b) )\n\nint a = 5 , b = 0;\nCALL_WITH_MAX\uff08++a , b\uff09;  \/\/ a++\u8c03\u7528\u4e862\u6b21  \u56e0\u4e3a\u8fd4\u56de\u7ed3\u679c\u7684\uff08a\uff09\u4e5f\u88ab\u66ff\u6362\u4e3a\uff08a++\uff09\nCALL_WITH_MAX\uff08++a\uff0cb+10\uff09 \/\/ a++\u88ab\u8c03\u7528\u4e00\u6b21<\/code><\/pre>\n\n\n\n<p>\u8fd9\u663e\u7136\u4e0d\u5408\u7406\uff0c\u54ea\u6015\u5982\u6b64\u5c0f\u5fc3\u4f9d\u7136\u4f1a\u6709\u95ee\u9898\uff0c\u56e0\u6b64\u8981\u6c42\u6211\u4eec\u7528\u5185\u8054\u51fd\u6570inline\u3002\u65e2\u53ef\u4ee5\u83b7\u5f97\u5b8f\u5e26\u6765\u7684\u6548\u7387\uff0c\u4e5f\u53ef\u4ee5\u83b7\u5f97\u7c7b\u578b\u5b89\u5168\u3002\u540c\u65f6\u53ef\u4ee5\u5199\u79c1\u6709\u7684\u5185\u8054\u51fd\u6570\uff0c\u8fd9\u5bf9define\u7edd\u5bf9\u505a\u4e0d\u5230<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>template&lt;typename T&gt;\ninline void callWithMax(const T&amp; a, const T&amp; b)\n{\n    f(a &gt; b ? a : b);\n}<\/code><\/pre>\n\n\n\n<p>\u603b\u7ed3\u4e00\u4e0b\uff1a<\/p>\n\n\n\n<p>\u4f9d\u9760\u4f7f\u7528const\uff0cinline\uff0cenum\u7b49\uff0c\u5bf9\u4e8e\u9884\u5904\u7406\u5668\uff08\u5c24\u5176\u662f#define\uff09\u9700\u6c42\u5c11\u4e86\uff0c\u4f46\u6ca1\u6709\u5b8c\u5168\u6d88\u9664\u3002\u5982#include\uff0c#ifdef\/#ifndef\u5728\u63a7\u5236\u7f16\u8bd1\u4e0a\u4ecd\u7136\u6709\u5de8\u5927\u4f5c\u7528\u3002<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-de2ada93c75b2d9e6aca94ac22b3bdeb\" style=\"font-size:24px\">\u5bf9\u4e8e\u7b80\u5355\u5e38\u91cf\uff0c\u9996\u9009const\u548cenum<br>\u5bf9\u4e8e\u7c7b\u4f3c\u51fd\u6570\u7684\u5b8f\uff0c\u4f7f\u7528inline<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u5c3d\u53ef\u80fd\u591a\u7528Const<\/h3>\n\n\n\n<p>\u66f4\u4e3b\u8981\u7684\u4f5c\u7528\u662f\u8ba9\u4f60\u7684\u7a0b\u5e8f\u66f4\u52a0\u5065\u58ee\u3002<\/p>\n\n\n\n<p>\u5bf9\u4e8e\u6307\u9488\uff0c\u8bb0\u5f97\u5206\u6e05\u695a\u4ee5\u4e0b\u51e0\u4e2a\u533a\u522b<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const char * p; \/\/\u6570\u636e\u4e3a\u5e38\u91cf\nchar * const p; \/\/\u6307\u9488\u4e3a\u5e38\u91cf\n\nvoid f1(const Widget *pw) ;\/\/\u4e8c\u8005\u90fd\u662f\u63a5\u6536\u4e00\u4e2a\u6307\u5411\u5e38\u91cfWidget\u5bf9\u8c61\u7684\u6307\u9488\nvoid f2(Widget const *pw) ;\/\/\u6ca1\u6709\u533a\u522b<\/code><\/pre>\n\n\n\n<p>\u5bf9\u4e8e\u8fed\u4ee3\u5668\uff0c\u672c\u8d28\u662f\u7c7b\uff0c\u53ea\u4e0d\u8fc7\u8d4b\u4e88\u4e86\u7c7b\u4f3c\u6307\u9488\u7684\u4f7f\u7528\u65b9\u6cd5\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u8fed\u4ee3\u5668\u4e3a\u5e38\u91cf\nconst std::vector&lt;int&gt;::iterator iter = vec.begin();\n*iter = 10;  \/\/\u6b63\u786e\n++iter;      \/\/\u9519\u8bef\uff0citer\u672c\u8eab\u4e3aconst\n\/\/ \u6570\u636e\u4e3a\u5e38\u91cf\nstd::vector&lt;int&gt;::const_iterator cIter = vec.begin()\uff1b\n*cIter = 10; \/\/ \u9519\u8bef\uff0c*cIter \u662f const\n++cIter;     \/\/ \u6b63\u786e<\/code><\/pre>\n\n\n\n<p>const\u53ef\u4ee5\u7528\u6765\u51fd\u6570\u91cd\u8f7d\uff0c\u653e\u5728\u51fd\u6570\u540e\u9762\uff0c\u542b\u4e49\u4e0a\u6765\u8bf4\uff0c\u8868\u793a<strong>\u8fd9\u662f\u4e2a\u4e0d\u4f1a\u4fee\u6539\u7c7b\u6210\u5458\u5bf9\u8c61\u7684\u51fd\u6570<\/strong>\uff0c\u5305\u62ec\u8fd4\u56de&amp;\u7c7b\u578b\u95f4\u63a5\u4fee\u6539\u3002<br>\u6b64\u65f6\u4ea7\u751f\u4e24\u79cd\u884c\u4e3a\u6a21\u5f0f\uff0c\u4e00\u79cd\u662fconst\u5bf9\u8c61\uff0c\u4e00\u79cd\u662f\u975econst\u5bf9\u8c61\u3002<\/p>\n\n\n\n<p>\u5bf9\u4e8econst\u5bf9\u8c61\uff0c\u90a3\u81ea\u7136\u662f\u53ea\u53ef\u4ee5\u4f7f\u7528\u540e\u5e26const\u7684\u51fd\u6570\uff0c\u56e0\u4e3a\u4e0d\u53ef\u4ee5\u8ba9\u7c7b\u6210\u5458\u5bf9\u8c61\u6709\u4fee\u6539\u3002\u5bf9\u4e8e\u975econst\u5bf9\u8c61\u81ea\u7136\u65e0\u6240\u8c13\u4e86\uff0c\u90fd\u53ef\u4ee5\u8c03\u7528\u3002\u540c\u65f6\uff0c\u4e5f\u53ef\u4ee5\u5229\u7528\u8fd9\u4e2a\u673a\u5236\u8fdb\u884c\u91cd\u8f7d\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Example {\npublic:\n    void display() const {\n        std::cout &lt;&lt; \"Const display called.\" &lt;&lt; std::endl;\n    }\n\n    void display() {\n        std::cout &lt;&lt; \"Non-const display called.\" &lt;&lt; std::endl;\n    }\n};\n\nint main() {\n    Example obj;\n    const Example constObj;\n\n    obj.display();        \/\/ \u8c03\u7528\u975e const \u7248\u672c\n    constObj.display();   \/\/ \u8c03\u7528 const \u7248\u672c\n\n    return 0;\n}<\/code><\/pre>\n\n\n\n<p>\u5bf9\u4e8e\u8fd9\u79cd\u6210\u5458\u51fd\u6570\u7684const\uff0c\u662f\u4e00\u79cd\u4f4d\u5e38\u91cf\u3002\u5373\uff0cconst\u5bf9\u8c61\u4e0d\u53ef\u4ee5\u4fee\u6539\u6210\u5458\u5bf9\u8c61\uff0c\u4f46\u662f\u5bf9\u4e8e\u4f8b\u5982\u6307\u9488\u7684\u6307\u5411\u7684\u5185\u5bb9\u662f\u5141\u8bb8\u4fee\u6539\u7684\u3002<\/p>\n\n\n\n<p>\u5982\u679c\u60f3\u8981\u5bf9\u51fd\u6570\u540e\u52a0const\u7684\u6210\u5458\u51fd\u6570\u4fee\u6539\uff0c\u90a3\u4e48\u53ef\u4ee5\u4f7f\u7528\u5173\u952e\u8bcdmutable\uff0c\u8868\u793a\u53ef\u4ee5\u4fee\u6539\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Example {\n    mutable int count = 0; \/\/ `mutable` \u5141\u8bb8\u5728 const \u51fd\u6570\u4e2d\u4fee\u6539\npublic:\n    void show() const {\n        count++; \/\/ \u4fee\u6539 mutable \u6210\u5458\u53d8\u91cf\n        std::cout &lt;&lt; \"Count: \" &lt;&lt; count &lt;&lt; std::endl;\n    }\n};\n\nint main() {\n    Example obj;\n    obj.show(); \/\/ \u8f93\u51fa Count: 1\n    obj.show(); \/\/ \u8f93\u51fa Count: 2\n    return 0;\n}<\/code><\/pre>\n\n\n\n<p>\u4e3a\u4e86\u907f\u514d\u91cd\u590d\u4ee3\u7801\uff0c\u90a3\u4e48\u6b64\u65f6\u53ef\u4ee5\u7528\u975econst\u7248\u672c\u7684\u53bb\u8c03\u7528const\u7248\u672c\u7684\uff0c\u8fd9\u6837\u907f\u514d\u91cd\u590d<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const char&amp; operator&#91;](std::size_t position) const {\n    return text&#91;position];\n}\n\nchar&amp; operator&#91;](std::size_t position) {\n    return const_cast&lt;char&amp;&gt;( \/\/\u5f3a\u5236\u8f6c\u5316\n        static_cast&lt;const TextBlock&amp;&gt;(*this)&#91;position] \/\/\u5f3a\u5236\u8f6c\u6362\u5f53\u524dthis\u4e3aconst\u5bf9\u8c61\u540e\uff0c\u5c31\u53ef\u4ee5\u8c03\u7528\u5230\u4e0a\u9762const\u7684\u5bf9\u8c61\u4e86\n    );\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u786e\u4fdd\u5bf9\u8c61\u5728\u4f7f\u7528\u4e4b\u524d\u88ab\u521d\u59cb\u5316<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">\u9ed8\u8ba4\u521d\u59cb\u5316\u987a\u5e8f<\/h4>\n\n\n\n<p>\u5bf9\u4e8e\u65e0\u521d\u59cb\u503c\u7684\u5bf9\u8c61\u3002\u5728C++\u7684c\u90e8\u5206\u4e2d\uff0c\u7531\u4e8e\u521d\u59cb\u5316\u4f1a\u5bfc\u81f4\u8fd0\u884c\u6210\u672c\u5219\u4e0d\u4fdd\u8bc1\u53d1\u751f\u521d\u59cb\u5316\uff1b\u5bf9\u4e8e\u975eC\u90e8\u5206\uff0c\u6709\u4e9b\u4f1a\u4fdd\u8bc1\u6709\u4e9b\u4e0d\u4f1a\u4fdd\u8bc1\u3002\u4f8b\u5982\u6570\u7ec4\uff0c\u4e0d\u4e00\u5b9a\u4fdd\u8bc1\u521d\u59cb\u5316\uff08\u5bf9\u4e8e\u6709\u4e9b\u7f16\u8bd1\u5668\uff0c\u4f60\u521d\u59cb\u5316int\u6570\u7ec4\u540e\u91cc\u9762\u7684\u6570\u4e0d\u4e00\u5b9a\u90fd\u662f0\uff09\uff0c\u800cvector\u5219\u4fdd\u8bc1\u521d\u59cb\u5316\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u7c7b\u5185\u5bf9\u8c61\u521d\u59cb\u5316\u987a\u5e8f<\/h4>\n\n\n\n<p>\u5bf9\u4e8e\u7c7b\u7684\u5bf9\u8c61\u521d\u59cb\u5316\uff0c\u6700\u597d\u4f7f\u7528\u521d\u59cb\u5316\u5217\u8868\u3002\u539f\u56e0\u662f\u8fd9\u6837\u4f1a\u76f4\u63a5\u8c03\u7528\u6784\u9020\u51fd\u6570\u800c\u4e0d\u662f\u5148\u521b\u5efa\u5bf9\u8c61\u540e\u8d4b\u503c\uff0c\u9020\u6210\u5f88\u591a\u5f00\u9500\u3002\u540c\u65f6\u5bf9\u4e8e\u7c7b\u5185\u7684const\u5bf9\u8c61\u5fc5\u987b\u4f7f\u7528\u8fd9\u79cd\u65b9\u5f0f\uff08\u6bd5\u7adf\u4e0d\u80fd\u7ed9const\u5bf9\u8c61\u8d4b\u503c\uff09<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Example {\npublic:\n    const int x;   \/\/ const \u6210\u5458\n    int&amp; y;        \/\/ \u5f15\u7528\u6210\u5458\n\n    Example(int value, int&amp; ref) : x(value), y(ref) {}  \/\/ \u5fc5\u987b\u4f7f\u7528\u521d\u59cb\u5316\u5217\u8868\n};<\/code><\/pre>\n\n\n\n<p>\u4f7f\u7528\u521d\u59cb\u5316\u5217\u8868\u65f6\u5019\uff0c<strong>\u521d\u59cb\u5316\u7684\u987a\u5e8f<\/strong>\u4e0e\u4f60\u7684\u521d\u59cb\u5316\u51fd\u6570\u65e0\u5173\uff0c\u800c\u662f\u7531\u4f60<strong>\u58f0\u660e\u7684\u987a\u5e8f\u6240\u51b3\u5b9a<\/strong>\u7684\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;iostream&gt;\n#include &lt;string&gt;\n\nclass Example {\nprivate:\n    std::string first;\n    std::string second;\n    int value;\n\npublic:\n    Example(const std::string&amp; str1, const std::string&amp; str2, int val)\n        : second(str2), \/\/ \u6ce8\u610f\uff1asecond \u5728\u521d\u59cb\u5316\u5217\u8868\u4e2d\u5148\u51fa\u73b0\n          first(str1),  \/\/ first \u5728\u521d\u59cb\u5316\u5217\u8868\u4e2d\u540e\u51fa\u73b0\n          value(val)\n    {\n        std::cout &lt;&lt; \"Constructor Body: first = \" &lt;&lt; first \n                  &lt;&lt; \", second = \" &lt;&lt; second \n                  &lt;&lt; \", value = \" &lt;&lt; value &lt;&lt; std::endl;\n    }\n};<\/code><\/pre>\n\n\n\n<p>\u4e3a\u4ec0\u4e48\u8981\u8fd9\u4e48\u8bbe\u8ba1\u5462\uff1f<\/p>\n\n\n\n<p>\u521d\u59cb\u5316\u662f\u53ef\u80fd\u6709\u4f9d\u8d56\u987a\u5e8f\u7684\u3002\u53ef\u80fda\u6210\u5458\u5bf9\u8c61\u521d\u59cb\u5316\u4f9d\u8d56\u4e8eb\uff0c\u90a3\u4e48\u5c31\u5fc5\u987b\u4fdd\u8bc1b\u5148\u521d\u59cb\u5316\u3002\u8fd9\u4e00\u6b65\u6700\u597d\u5728\u58f0\u660e\u65f6\u5019\u5c31\u5b8c\u6210\u3002\u5982\u679c\u653e\u5728\u6784\u9020\u51fd\u6570\u91cc\u9762\uff0c\u9762\u4e34\uff1a1\u3001\u4f9d\u8d56\u4e86\u4e0d\u5728\u521d\u59cb\u5316\u5217\u8868\u7684\u5bf9\u8c61\uff1b2\u3001\u540e\u7eed\u5f00\u53d1\u8005\u4e0d\u77e5\u9053\u521d\u59cb\u5316\u4f9d\u8d56\u5173\u7cfb\uff0c\u5bfc\u81f4\u6784\u9020\u51fd\u6570\u9519\u8bef\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u975e\u5c40\u90e8\u9759\u6001\u5bf9\u8c61\u521d\u59cb\u5316<\/h4>\n\n\n\n<p>\u5c40\u90e8\u9759\u6001\u5bf9\u8c61\uff1a\u51fd\u6570\u5185\u90e8\u7684\u9759\u6001\u5bf9\u8c61\u3002<br>\u975e\u5c40\u90e8\u9759\u6001\u5bf9\u8c61\uff1a\u9664\u4e86\u5c40\u90e8\u9759\u6001\u5bf9\u8c61\u5916\u7684\u5bf9\u8c61\u3002<br>\u7f16\u8bd1\u5355\u5143\uff1a\u5bf9\u4e8eC++\u6765\u8bf4\uff0c\u6bcf\u4e00\u4e2a.cpp\u6587\u4ef6\u548c\u5b83\u5305\u542b\u7684\u5934\u6587\u4ef6\uff08\u901a\u8fc7#include\uff09\u5171\u540c\u7ec4\u6210\u4e00\u4e2a\u7f16\u8bd1\u5355\u5143\uff0c\u56e0\u6b64<strong>\u6bcf\u4e00\u4e2a&nbsp;<code>.cpp<\/code>&nbsp;\u6587\u4ef6\uff08\u6e90\u6587\u4ef6\uff09\u90fd\u4f1a\u5bf9\u5e94\u4e00\u4e2a\u7f16\u8bd1\u5355\u5143<\/strong>\u3002<\/p>\n\n\n\n<p>\u5728C++\uff0c\u975e\u5c40\u90e8\u9759\u6001\u5bf9\u8c61\u7684\u521d\u59cb\u5316\u987a\u5e8f\u662f\u672a\u5b9a\u4e49\u7684\uff0c\u5c24\u5176\u662f\u8fd9\u4e9b\u5bf9\u8c61\u4f4d\u4e8e\u4e0d\u540c\u7684\u7f16\u8bd1\u5355\u5143\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class FileSystem {\npublic:\n    \/\/ \u5047\u8bbe\u8fd9\u662f\u4e00\u4e2a\u6587\u4ef6\u7cfb\u7edf\u7c7b\n    std::size_t numDisks() const; \/\/ \u6210\u5458\u51fd\u6570\uff0c\u8fd4\u56de\u78c1\u76d8\u6570\u91cf\n};\n\nFileSystem tfs; \/\/ \u5b9a\u4e49\u4e00\u4e2a\u975e\u5c40\u90e8\u9759\u6001\u5bf9\u8c61\nextern FileSystem tfs; \/\/ \u4f9b\u5176\u4ed6\u7f16\u8bd1\u5355\u5143\n\nclass Directory{\npublic:\n    Directory(params);\n}\nDirectory::Directory(params)\n{\n    std::size_t disks = tfs.numDisks(); \/\/\u53ef\u80fdundefined\n}<\/code><\/pre>\n\n\n\n<p>\u4e3a\u4ec0\u4e48\u8de8\u7f16\u8bd1\u5355\u5143\u7684\u987a\u5e8f\u672a\u5b9a\u4e49\uff1f\u56e0\u4e3aC++\u6ca1\u505a\u8fd9\u65b9\u9762\u89c4\u5b9a\u3002\u4e2a\u4eba\u731c\u6d4b\u662f\u51fa\u4e8e\u6548\u7387\u8003\u8651\uff0c\u6bd5\u7adf\u89c4\u5b9a\u8d8a\u5c11\uff0c\u6548\u7387\u8d8a\u9ad8\u3002<\/p>\n\n\n\n<p>\u89e3\u51b3\u65b9\u6cd5\uff1a<strong>\u5168\u90e8\u8f6c\u5316\u4e3a\u9759\u6001\u5c40\u90e8\u53d8\u91cf\uff0c\u4e0d\u8981\u5199\u975e\u5c40\u90e8\u9759\u6001\u5bf9\u8c61<\/strong>\u3002\u4f7f\u7528\u65b9\u6cd5\u5982\u4e0b\uff0c\u5373\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class FileSystem { ... }; \n\nFileSystem&amp; tfs() {        \/\/ \u5168\u5c40\u7684\u51fd\u6570\n    static FileSystem fs;  \/\/ \u5b9a\u4e49\u4e00\u4e2a\u5c40\u90e8\u9759\u6001\u5bf9\u8c61\n    return fs;             \/\/ \u8fd4\u56de\u8be5\u5bf9\u8c61\u7684\u5f15\u7528\n}\n\nclass Directory { ... };   \/\/ \u548c\u4e4b\u524d\u4e00\u6837\n\nDirectory::Directory(params) {  \/\/ \u552f\u4e00\u533a\u522b\u662f\u5bf9TFS\u5bf9\u8c61\u7684\u5f15\u7528\u53d8\u4e3a\u4e86tfs()\n    ...\n    std::size_t disks = tfs().numDisks(); \/\/ \u4f7f\u7528 tfs() \u83b7\u53d6 FileSystem \u5bf9\u8c61\n}<\/code><\/pre>\n\n\n\n<p>\u73b0\u5728\u8c03\u7528\u7684\u903b\u8f91\u662f\u6309\u9700\u8c03\u7528\uff0c\u9700\u8981\u7684\u65f6\u5019\u8c03\u7528\u51fd\u6570\uff0c\u624d\u4f1a\u53bb\u4ea7\u751f\u5bf9\u8c61\uff0c\u907f\u514d\u4e86\u8fd9\u4e2a\u95ee\u9898\u3002\u5efa\u8bae\u5168\u90e8\u7684\u9759\u6001\u975e\u5c40\u90e8\u5bf9\u8c61\u5168\u90e8\u90fd\u8f6c\u5316\u4e3a\u8fd9\u79cd\u5199\u6cd5\u3002<\/p>\n\n\n\n<p>\u5728\u591a\u7ebf\u7a0b\u4e2d\uff0c\u6700\u597d\u5728\u5355\u7ebf\u7a0b\u542f\u52a8\u9636\u6bb5\u663e\u793a\u7684\u8c03\u7528\u4e00\u6b21\uff0c\u907f\u514d\u7ebf\u7a0b\u5b89\u5168\u4e4b\u7c7b\u7684\u95ee\u9898\u3002<\/p>\n\n\n\n<p>\u603b\u7ed3\u4e00\u4e0b\uff1a<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-a194c03bfa2e4d79b40eadf2ab0f9ac5\">1. <strong>\u624b\u52a8\u521d\u59cb\u5316\u5185\u7f6e\u7c7b\u578b\u7684\u5bf9\u8c61\uff0c<\/strong>C++\u4e0d\u4e00\u5b9a\u4f1a\u521d\u59cb\u5316\u4ed6\u4eec\u3002<br>2. \u5728\u6784\u9020\u51fd\u6570\u4e2d\uff0c<strong>\u4f18\u5148\u4f7f\u7528\u521d\u59cb\u5316\u5217\u8868<\/strong>\u3002\u540c\u65f6\uff0c\u6ce8\u610f\u91c7\u7528\u521d\u59cb\u5316\u5217\u8868\u65f6\u5b9e\u9645\u7684\u7533\u660e\u987a\u5e8f\u662f\u7c7b\u5185\u53d8\u91cf\u7684\u7533\u660e\u987a\u5e8f\uff0c\u56e0\u6b64\u6700\u597d<strong>\u521d\u59cb\u5316\u5217\u8868\u987a\u5e8f\u4e0e\u7c7b\u5185\u7533\u660e\u987a\u5e8f\u4e00\u81f4\u3002<\/strong><br>3. \u901a\u8fc7<strong>\u628a\u975e\u9759\u6001\u5c40\u90e8\u5bf9\u8c61\u66ff\u6362\u4e3a\u5c40\u90e8\u9759\u6001\u5bf9\u8c61<\/strong>\uff0c\u907f\u514d\u8de8\u7f16\u8bd1\u5355\u5143\u5e26\u6765\u7684\u521d\u59cb\u5316\u987a\u5e8f\u95ee\u9898\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u6784\u9020\u3001\u6790\u6784\u3001\u8d4b\u503c\u8fd0\u7b97<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u4e86\u89e3cpp\u9ed8\u9ed8\u7f16\u5199\u5e76\u8c03\u7528\u4e86\u54ea\u4e9b\u51fd\u6570<\/h3>\n\n\n\n<p>cpp\u9ed8\u8ba4\u6709\u62f7\u8d1d\u6784\u9020\u51fd\u6570\uff0c\u8d4b\u503c\u62f7\u8d1d\u8fd0\u7b97\u7b26\u548c\u6790\u6784\u51fd\u6570\u3002\u6240\u4ee5\u5c31\u7b97\u5bf9\u4e8e\u4e00\u4e2a\u7a7a\u7c7b\uff0c\u4e5f\u7b49\u4ef7\u4e8e\u6709\u4e0b\u9762\u8fd9\u4e9b\u65b9\u6cd5\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Empty {\npublic:\n    Empty() { ... }                          \/\/ \u9ed8\u8ba4\u6784\u9020\u51fd\u6570\n    Empty(const Empty&amp; rhs) { ... }          \/\/ \u62f7\u8d1d\u6784\u9020\u51fd\u6570\n    ~Empty() { ... }                         \/\/ \u6790\u6784\u51fd\u6570\n    Empty&amp; operator=(const Empty&amp; rhs) { ... } \/\/ \u62f7\u8d1d\u8d4b\u503c\u8fd0\u7b97\u7b26\n};\n\nEmpty e1;           \/\/ \u9ed8\u8ba4\u6784\u9020\u51fd\u6570\nEmpty e2(e1);       \/\/ \u62f7\u8d1d\u6784\u9020\u51fd\u6570\ne2 = e1;            \/\/ \u62f7\u8d1d\u8d4b\u503c\u8fd0\u7b97\u7b26\n                    \/\/ \u6790\u6784\u51fd\u6570 \n<\/code><\/pre>\n\n\n\n<p>\u5982\u679c\u81ea\u5df1\u5199\u4e86\u6784\u9020\u51fd\u6570\uff0c\u7f16\u8bd1\u5668\u7684\u5c31\u4f1a\u5931\u6548\u3002<\/p>\n\n\n\n<p>\u5bf9\u4e8e\u4e0b\u9762\u7684\u4f8b\u5b50\uff0c\u7c7b\u5185\u6709\u4e00\u4e2a\u5f15\u7528\u7c7b\u578b\u548c\u6a21\u677f\u7c7b\u578b\u5e38\u91cf\uff0c\u90fd\u662f<strong>\u53ea\u80fd\u591f\u521d\u59cb\u5316\u800c\u4e0d\u53ef\u4ee5\u4fee\u6539\u7684<\/strong>\uff08\u5f15\u7528\u4e0d\u53ef\u4ee5\u91cd\u65b0\u7ed1\u5b9a\u65b0\u5bf9\u8c61\uff0c\u4f46\u53ef\u4ee5=\u53d8\u4e3a\u53e6\u4e00\u4e2a\u5f15\u7528\uff0c\u56e0\u4e3a\u672c\u8d28\u5c31\u662f\u53d8\u91cf\uff09\u3002\u5bf9\u4e8e\u8fd9\u6837\u7684\u5bf9\u8c61\uff0c\u7f16\u8bd1\u5668\u7684\u9ed8\u8ba4\u8d4b\u503c\u51fd\u6570\u663e\u7136\u7528\u4e0d\u4e86\u4e86\uff0c\u6b64\u65f6\u5c31\u4f1a\u76f4\u63a5\u62a5\u9519\uff0c<strong>\u9700\u8981\u4f60\u81ea\u5df1\u53bb\u5199\u8d4b\u503c\u51fd\u6570\u3002<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>template &lt;class T&gt;\nclass NamedObject {\npublic:\n    NamedObject(std::string&amp; name, const T&amp; value):nameValue(name),objectValue(value);\nprivate:\n    std::string&amp; nameValue; \/\/ \u5f15\u7528\u7c7b\u578b\u6210\u5458\u53d8\u91cf\n    const T objectValue;    \/\/ \u5e38\u91cf\u7c7b\u578b\u6210\u5458\u53d8\u91cf\n};\n\nstd::string newDog(\"Persephone\");\nstd::string oldDog(\"Satch\");\nNamedObject&lt;int&gt; p(newDog, 2);  \/\/ \u521b\u5efa\u5bf9\u8c61 p\uff0cnameValue \u6307\u5411 newDog\nNamedObject&lt;int&gt; s(oldDog, 36); \/\/ \u521b\u5efa\u5bf9\u8c61 s\uff0cnameValue \u6307\u5411 oldDog\np = s;                          \/\/ \u5c1d\u8bd5\u8d4b\u503c\uff0c\u5931\u8d25\u3002<\/code><\/pre>\n\n\n\n<p>\u5728\u7ee7\u627f\u4e2d\uff0c\u5982\u679c<strong>\u57fa\u7c7b\u7684\u62f7\u8d1d\u8d4b\u503c\u8fd0\u7b97\u6cd5\u58f0\u660e\u4e3aprivate\uff0c\u5219\u6d3e\u751f\u7c7b\u65e0\u6cd5\u751f\u6210\u62f7\u8d1d\u8d4b\u503c\u8fd0\u7b97\u7b26<\/strong>\uff0c\u54ea\u6015\u91cd\u5199\u4e5f\u90fd\u4e0d\u884c\u3002\u56e0\u4e3a\u6d3e\u751f\u7c7b\u7684\u8d4b\u503c\u8fd0\u7b97\u662f\u9700\u8981\u8c03\u7528\u57fa\u51fd\u6570\u7684\u90e8\u5206\u7684\u3002\u56e0\u6b64\u5bf9\u4e8e\u8fd9\u79cd\u60c5\u51b5\u4e00\u822c\u7528protected\u89e3\u51b3\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u82e5\u4e0d\u60f3\u4f7f\u7528\u7f16\u8bd1\u5668\u51fd\u6570\uff0c\u9700\u8981\u660e\u786e\u62d2\u7edd<\/h3>\n\n\n\n<p>\u672c\u8d28\u8fd8\u662f\u63d0\u9ad8\u5065\u58ee\u6027\u7684\u3002\u5728\u5f00\u59cb\u8bbe\u8ba1\u5e95\u5c42\u7684\u65f6\u5019\uff0c\u660e\u786e\u6ca1\u6709\u8fd9\u4e2a\u529f\u80fd\u3002\u907f\u514d\u540e\u7eed\u9519\u8bef\u4f7f\u7528\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class HomeForSale{ ... } \/\/\u60f3\u8981\u4fdd\u8bc1\u552f\u4e00\u6027\u7684home\nHomeForSale h1;\nHomeForSale h2;\nHomeForSale h3(h1);  \/\/\u8bd5\u56fe\u62f7\u8d1d\uff0c\u5e94\u8be5\u963b\u6b62\u7f16\u8bd1\u901a\u8fc7\nh1 = h2;<\/code><\/pre>\n\n\n\n<p>\u5728 C++ 11\u4e4b\u524d\uff0c\u53ef\u4ee5\u6211\u4eba\u4e3a\u518d\u5199\u7533\u660e\uff0c\u7136\u540e\u4e0d\u5b9a\u4e49\uff0c\u8fd9\u6837\u4f1a\u5728\u94fe\u63a5\u65f6\u5019\u62a5\u9519\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class HomeForSale{\nprivate:\n    HomeForSale(const HomeForSale &amp;);\n    HomeForSale&amp; operator=(const HomeForSale &amp;);\n} <\/code><\/pre>\n\n\n\n<p>\u5728C++11\u4e4b\u540e\u5c31\u53ef\u4ee5\u4f7f\u7528delete\u4e86\uff0c\u8fd9\u6837\u5728\u7f16\u8bd1\u671f\u5c31\u62a5\u9519\uff0c\u66f4\u597d\u4e00\u4e9b\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class HomeForSale{\n    HomeForSale(const HomeForSale &amp;) = delete;\n    HomeForSale&amp; operator=(const HomeForSale &amp;) = delete;\n} <\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u4e3a\u591a\u6001\u57fa\u7c7b\u58f0\u660e\u865a\u6790\u6784\u51fd\u6570<\/h3>\n\n\n\n<p>\u8fd9\u4e2a\u6709\u4e86\u89e3\u8fc7\uff0c\u5f53\u6709\u4e86\u865a\u6790\u6784\u51fd\u6570\u4e4b\u540e\uff0c\u8c03\u7528\u6790\u6784\u51fd\u6570\u5c31\u4f1a\u9010\u7ea7\u5f80\u57fa\u7c7b\u8c03\u7528\uff0c\u4fdd\u8bc1\u57fa\u7c7b\u90e8\u5206\u9501new\u7684\u5bf9\u8c61\u4e5f\u53ef\u4ee5\u5f97\u5230\u6b63\u786e\u7684\u91ca\u653e\u3002\u6240\u4ee5\u4e00\u822c\u5efa\u8bae\u6700\u597d\u662f\u8fd9\u6837\u3002<\/p>\n\n\n\n<p>\u865a\u51fd\u6570\u865a\u6307\u9488\u90e8\u5206\u5185\u5bb9\u4e0d\u5728\u8fd9\u91cc\u8d58\u8ff0\u3002 <\/p>\n\n\n\n<p><strong>C++\u4e2d\u6807\u51c6\u7684string\u4e0d\u5305\u542b\u865a\u6790\u6784\u51fd\u6570\uff0c\u56e0\u6b64\u4e0d\u8981\u5f53\u505a\u57fa\u7c7b\u3002<\/strong>\u539f\u56e0\u5927\u6982\u662f\u907f\u514d\u5f00\u9500\u5427\uff0c\u56e0\u4e3a\u5f15\u7528\u865a\u51fd\u6570\u5c31\u4f1a\u6709\u865a\u6307\u9488\u53bb\u6307\u5411\uff0c\u662f\u4e0d\u5fc5\u8981\u7684\u5f00\u9500\u3002<\/p>\n\n\n\n<p>\u5bf9\u4e8e\u521b\u5efa\u4e00\u4e2a\u62bd\u8c61\u7c7b\uff0c\u9700\u8981\u663e\u793a\u7684\u58f0\u660e\u4e00\u4e2a\u7eaf\u865a\u51fd\u6570\u3002\u4f46\u6709\u65f6\u5019\u4f60\u6ca1\u6709\u7eaf\u865a\u51fd\u6570\u600e\u4e48\u529e\uff1f\u4e00\u822c\u8fd9\u65f6\u5019\u5c31\u5bf9\u6790\u6784\u51fd\u6570\u53bb\u505a\u5904\u7406\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class AWOV {\npublic:\n    virtual ~AWOV() = 0; \/\/ \u58f0\u660e\u7eaf\u865a\u6790\u6784\u51fd\u6570\n};\n\/\/ \u5fc5\u987b\u63d0\u4f9b\u7eaf\u865a\u6790\u6784\u51fd\u6570\u7684\u5b9a\u4e49\nAWOV::~AWOV() {}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u522b\u8ba9\u5f02\u5e38\u9003\u79bb\u6790\u6784\u51fd\u6570<\/h3>\n\n\n\n<p>C++\u5e76\u4e0d\u7981\u6b62\u8fd9\u79cd\u884c\u4e3a\uff0c\u5373\u6790\u6784\u51fd\u6570\u53ef\u4ee5\u5410\u51fa\u5f02\u5e38\u3002<\/p>\n\n\n\n<p>\u4e3a\u4ec0\u4e48\u4e0d\u8981\u9003\u79bb\uff1f\u4f60\u865a\u6784\u51fd\u6570\u524d\u9762\u7684\u5185\u5bb9\u62a5\u9519\uff0c\u629b\u51fa\u5f02\u5e38\uff0c\u53ef\u80fd\u5c31\u5bfc\u81f4\u865a\u6784\u51fd\u6570\u540e\u534a\u90e8\u5206\u7684\u5bf9\u8c61\u5f97\u4e0d\u5230\u6b63\u786e\u7684\u91ca\u653e\uff0c\u51fa\u73b0\u672a\u5b9a\u4e49\u884c\u4e3a\u3002<\/p>\n\n\n\n<p>\u4f46\u662f\uff0c\u6790\u6784\u51fd\u6570\u5185\u90e8\u53c8\u4e0d\u53ef\u80fd\u6ca1\u6709\u5f02\u5e38\uff0c\u5982\u4f55\u5904\u7406\u9519\u8bef\uff1f\u6b64\u65f6\u53ef\u4ee5\u663e\u793a\u7684try catch\uff0c\u628a\u5185\u90e8\u9519\u8bef\u6355\u83b7\u907f\u514d\u95ee\u9898\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class DBConnection {\npublic:\n    static DBConnection create(); \/\/ \u4e00\u4e2a\u7528\u4e8e\u521b\u5efaDBConnection\u5bf9\u8c61\u7684\u9759\u6001\u51fd\u6570\n    ~DBConnection() {\n        try {\n            \/\/ \u5047\u8bbe\u8fd9\u91cc\u5173\u95ed\u6570\u636e\u5e93\u8fde\u63a5\u53ef\u80fd\u5931\u8d25\n            closeConnection();\n        } catch (...) {\n            \/\/ \u6355\u83b7\u6240\u6709\u5f02\u5e38\u5e76\u8bb0\u5f55\u9519\u8bef\uff0c\u6216\u8005\u81ea\u5b9a\u4e49\u5904\u7406\u903b\u8f91\uff0c\u800c\u4e0d\u662f\u8ba9\u5f02\u5e38\u4f20\u64ad\n            logError(\"Failed to close DB connection\");\n        }\n    }\nprivate:\n    void closeConnection() { \/\/ \u5173\u95ed\u8fde\u63a5\u7684\u5b9e\u73b0 }\n    void logError(const std::string&amp; message) { \/\/ \u8bb0\u5f55\u9519\u8bef\u65e5\u5fd7  }\n};<\/code><\/pre>\n\n\n\n<p>\u6b64\u65f6\uff0c\u53ef\u4ee5\u518d\u5199\u4e00\u4e2a\u5173\u95ed\u8fde\u63a5\u7684\u5b9e\u73b0\uff0c\u7528\u4e8e\u4e00\u822c\u60c5\u51b5\u3002\u6790\u6784\u51fd\u6570\u5185\u7684\u5173\u95ed\u8fde\u63a5\u53ef\u4ee5\u5904\u7406\u7279\u6b8a\u60c5\u51b5\uff08\u8c03\u7528\u9700\u524d\u68c0\u67e5\u662f\u5426\u771f\u7684\u5173\u95ed\uff09\u3002\u591a\u91cd\u4fdd\u9669\u907f\u514d\u95ee\u9898\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u7edd\u4e0d\u5728\u6784\u9020\u548c\u6790\u6784\u8fc7\u7a0b\u4e2d\u8c03\u7528\u865a\u51fd\u6570<\/h3>\n\n\n\n<p>\u6d3e\u751f\u7c7b\u5bf9\u8c61\u7684\u57fa\u7c7b\u90e8\u5206\u5728\u6d3e\u751f\u7c7b\u90e8\u5206\u4e4b\u524d\u6784\u9020\u3002\u5728\u6784\u9020\u57fa\u7c7b\u65f6\u5019\uff0c\u865a\u51fd\u6570\u6c38\u8fdc\u4e0d\u4f1a\u8fdb\u5165\u6d3e\u751f\u7c7b\uff08\u6d3e\u751f\u7c7b\u53ef\u80fd\u8fd8\u6709\u5f88\u591a\u5185\u5bb9\u6ca1\u6709\u521d\u59cb\u5316\uff09<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Transaction {  \/\/ \u6240\u6709\u4ea4\u6613\u7684\u57fa\u7c7b\npublic:\n    Transaction();\n    virtual void logTransaction() const = 0 {cout &lt;&lt;  \"Transaction \";};  \/\/ \u521b\u5efa\u4f9d\u8d56\u4e8e\u7c7b\u578b\u7684\u65e5\u5fd7\u6761\u76ee\uff0c\u7eaf\u865a\u51fd\u6570\u5b50\u7c7b\u5fc5\u987b\u8981\u5b9e\u73b0\uff0c\u672c\u8eab\u53ef\u4ee5\u4e0d\u5b9e\u73b0\u3002\n};\n\n\nclass BuyTransaction : public Transaction {  \/\/ \u6d3e\u751f\u7c7b\npublic:\n    virtual void logTransaction() const { cout &lt;&lt; \"BuyTransaction \";};  \/\/ \u8bb0\u5f55\u8fd9\u79cd\u7c7b\u578b\u7684\u4ea4\u6613\n};<\/code><\/pre>\n\n\n\n<p>\u6b64\u65f6\u8c03\u7528\u5b50\u7c7b\u6784\u9020\uff0c\u8f93\u51fa\u7684\u7ed3\u679c\u81ea\u7136\u4e5f\u4e3a Transaction \u4e86\u3002\u539f\u56e0\u662f\u6784\u9020\u57fa\u7c7b\u65f6\u5019\uff0c\u57fa\u7c7b\u5bf9\u8c61\u5c31\u8ba4\u4e3a\u81ea\u5df1\u662f\u57fa\u7c7b\u5bf9\u8c61\uff0c\u770b\u4e0d\u89c1\u540e\u7eed\u7684\u5b9e\u73b0\uff1b\u540c\u65f6\uff0c\u6d3e\u751f\u7c7b\u53ef\u80fd\u8fd8\u6709\u5f88\u591a\u5185\u5bb9\u6ca1\u6709\u521d\u59cb\u5316\u3002\u76f2\u76ee\u7684\u8c03\u7528\u663e\u7136\u662f\u4e0d\u53ef\u884c\u7684\u3002<\/p>\n\n\n\n<p>\u89e3\u51b3\u65b9\u6cd5\u6709\u5f88\u591a\u79cd\uff0c\u7b2c\u4e00\u79cd\u628a\u51fd\u6570\u8f6c\u5316\u4e3a\u975e\u865a\u51fd\u6570\uff0c\u57fa\u7c7b\u6784\u9020\u51fd\u6570\u6d41\u51fa\u53c2\u6570\u7684\u4f4d\u7f6e\uff0c\u5728\u5b50\u7c7b\u6784\u9020\u51fd\u6570\u8c03\u7528\u7684\u65f6\u5019\u4f7f\u7528\u6b64\u51fd\u6570<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Transaction {\npublic:\n    explicit Transaction(const std::string&amp; logInfo); \/\/ explicit\u4f5c\u7528\u662f\u907f\u514d\u9690\u5f0f\u7684\u8f6c\u6362\uff0c\u6bd4\u5982\u6211\u76f4\u63a5\u4f20\u4e00\u4e2a\u201c123\u201d\u8fdb\u53bb\uff0c\u89c4\u907f\u98ce\u9669\n    void logTransaction(const std::string&amp; logInfo) const;\n};\nTransaction::Transaction(const std::string&amp; logInfo) {\n    logTransaction(logInfo);  \/\/ \u8c03\u7528\u975e\u865a\u51fd\u6570\n}\n\nclass BuyTransaction : public Transaction {\npublic:\n    BuyTransaction(parameters) : Transaction(createLogString(parameters)) {\n    \/\/ \u5b50\u7c7b\u6784\u9020\u51fd\u6570\u7684\u903b\u8f91\n    }\nprivate:\n    static std::string createString(parameters);\/\/ \u6700\u597d\u7528static\u51fd\u6570\uff0c\u53ef\u4ee5\u907f\u514d\u7c7b\u5bf9\u8c61\u672a\u521d\u59cb\u5316\u7684\u95ee\u9898\uff0c\u66f4\u52a0\u4e00\u5c42\u4fdd\u9669\u4e0d\u51fa\u9519\u3002\n};<\/code><\/pre>\n\n\n\n<p>\u56e0\u6b64\u603b\u7ed3\uff1a<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-97250f1536eb324d42796e4bde6e011c\">\u4e0d\u8981\u5728\u6784\u9020\u6216\u6790\u6784\u8fc7\u7a0b\u4e2d\u8c03\u7528\u865a\u6784\u51fd\u6570\uff0c\u56e0\u4e3a\u8fd9\u6837\u7684\u8c03\u7528\u6c38\u8fdc\u4e0d\u4f1a\u4e0b\u964d\u81f3\u6d3e\u751f\u7684\u7c7b<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u4ee4operator=\u8fd4\u56de\u4e00\u4e2a\u6307\u5411*this\u7684\u5f15\u7528<\/h3>\n\n\n\n<p>\u5bf9\u4e8e\u8d4b\u503c\uff0c\u6211\u4eec\u53ef\u4ee5\u8fdb\u884c\u5982\u4e0b\u64cd\u4f5c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int x , y , z;\nx = y = z = 15; \/\/ x = ( y = ( z = 15 ))\uff1b<\/code><\/pre>\n\n\n\n<p>\u5b9e\u73b0\u7684\u539f\u7406\u5c31\u662f\u8d4b\u503c\u64cd\u4f5c\u8fd4\u56de\u4e86\u4e00\u4e2a\u6307\u5411\u5de6\u4fa7\u53c2\u6570\u7684\u5f15\u7528\u3002\u56e0\u6b64\uff0c\u81ea\u5df1\u5b9e\u73b0\u7684\u7c7b\u6700\u597d\u4e5f\u9075\u5b88\u8fd9\u4e2a\u7ea6\u5b9a\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Widget{\n    Widght&amp; operator= (const Widght&amp; rhs){\n        ...\n        return *this; \/\/\u8fd4\u56de\u5de6\u503c\u5bf9\u8c61\n    }\n    Widght&amp; operator+= (const Widght&amp; rhs){ \/\/\u5bf9\u4e8e+= , -= , *=\u5bf9\u8c61\u5747\u9002\u7528\n        ...\n        return *this;\n    }\n    Widght&amp; operator= (int rhs){ \/\/\u5bf9\u4e8e\u53c2\u6570\u4e0d\u7b26\u5408\u7ea6\u5b9a\u7684\uff0c\u4e5f\u9002\u7528\n        ...\n        return *this; \n    }\n}<\/code><\/pre>\n\n\n\n<p>\u8fd4\u56de&amp;\u5bf9\u8c61\u53ef\u4ee5\u4fbf\u4e8e\u6211\u4eec\u4fee\u6539\u5176\u672c\u8eab<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u5728operator=\u4e2d\u5904\u7406\u81ea\u6211\u8d4b\u503c<\/h3>\n\n\n\n<p>\u6bd4\u5982\u5bf9\u4e8e\u7c7b\u5185\u7684\u6307\u9488\uff0c\u53ef\u80fd\u4f1a\u5bfc\u81f4\u8d44\u6e90\u7684\u9519\u8bef\u91ca\u653e<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Bitmap {\n};\nclass Widget {\npublic:\n    Bitmap *bp;\n    Widget &amp;operator=(const Widget &amp;rhs) {\n        delete bp;\n        bp = new Bitmap(*rhs.bp);\n        return *this;\n    }\n};<\/code><\/pre>\n\n\n\n<p>\u6b64\u65f6\uff0c\u5982\u679c\u81ea\u6211\u8d4b\u503c\uff0c\u5219\u4f1a\u5bfc\u81f4\u8d44\u6e90\u88ab\u5220\u9664\u62a5\u9519\uff0c\u56e0\u6b64\u9700\u8981\u7279\u6b8a\u5904\u7406\u81ea\u6211\u8d4b\u503c\u7684\u60c5\u51b5\uff0c\u5982\u4f20\u7edf\u7684\u65b9\u6cd5\u662f\u5982\u4e0b\uff0c\u901a\u8fc7\u68c0\u6d4b\u5730\u5740\u662f\u5426\u76f8\u540c\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Bitmap {\n};\nclass Widget {\npublic:\n    Bitmap *bp;\n    Widget &amp;operator=(const Widget &amp;rhs) {\n        if(this == &amp;rhs) return *this; \/\/ \u81ea\u6211\u8d4b\u503c\uff0cdonothing\n        delete bp;\n        bp = new Bitmap(*rhs.bp);\n        return *this;\n    }\n};<\/code><\/pre>\n\n\n\n<p>\u4f46\u6b64\u65f6\u4ecd\u7136\u4f1a\u6709\u95ee\u9898\uff0c\u6bd4\u5982\u5728new\u5904\u62a5\u9519\uff0c\u629b\u51fa\u5f02\u5e38\uff0c\u65e7\u7684\u90a3\u4e00\u5757\u5185\u5b58\u5c31\u4e0d\u5b58\u5728\u6570\u636e\uff0c\u5f88\u5371\u9669\u3002\u56e0\u6b64\u53ef\u4ee5\u5148new\u4e00\u4efd\u51fa\u6765\uff0c\u518d\u5220\u9664\u81ea\u8eab\u539f\u672c\u7684\uff08\u6709\u4e9b\u50cf\u6587\u4ef6\u7cfb\u7edf\u7684\u6587\u4ef6\u79fb\u52a8\uff09\u3002\u6b64\u65f6\u662f\u53ef\u4ee5\u5e94\u5bf9\u81ea\u6211\u8d4b\u503c\u7684\u60c5\u51b5\uff0c\u5f53\u7136\u4e3a\u4e86\u66f4\u9ad8\u7684\u6548\u7387\u4e5f\u53ef\u4ee5\u518d\u5224\u65ad\u4e00\u6b21\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Bitmap {\n};\nclass Widget {\npublic:\n    Bitmap *bp;\n    Widget &amp;operator=(const Widget &amp;rhs) {\n        const Bitmap *pOrig = bp;\n        bp = new Bitmap(*rhs.bp);\n        delete pOrig;\n        return *this;\n    }\n};<\/code><\/pre>\n\n\n\n<p>\u5f53\u7136\u6700\u540e\u8fd8\u53ef\u4ee5\u8fd9\u6837\uff0c\u4f20\u5165\u5bf9\u8c61\u7684\u526f\u672c\u7136\u540e\u4ea4\u6362\uff0c\u5c31\u4e0d\u5b58\u5728\u95ee\u9898\u4e86\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    void swap(Widget rhs); \/\/ \u540e\u7eed\u6709\u6709\u5173swap\u7684\u4ecb\u7ecd\uff0c\u6761\u6b3e29\n    Widget &amp;operator=(const Widget rhs) {\n        swap(rhs);\n        return *this;\n    }<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u62f7\u8d1d\u5bf9\u8c61\u7684\u6240\u6709\u90e8\u5206<\/h3>\n\n\n\n<p>\u770b\u6807\u9898\u731c\u662f\u6709\u5173deepcopy\u7684\u95ee\u9898\uff0c\u4f8b\u5982\u5bf9\u4e8e\u8fd9\u4e2a\u5bf9\u8c61\uff0c\u5982\u679c\u8c03\u7528\u9ed8\u8ba4\u62f7\u8d1d\u6784\u9020\u51fd\u6570\uff0c\u90a3\u4e48\u4f1a\u51fa\u73b0\u4e00\u4e2a\u95ee\u9898\uff0c\u5373\u4e24\u4e2aWidght\u5bf9\u8c61\u6307\u5411\u4e86\u540c\u4e00\u7247\u5206\u914d\u7684\u5185\u5b58\u3002\u5982\u679cw1\u91ca\u653e\uff0c\u628abp \u7ed9delete\u4e86\uff0c\u90a3\u4e48\u8bbf\u95eew2\u7684bp\u5c31\u4f1a\u6709\u95ee\u9898\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Widget {\n    Bitmap *bp;\n};\nWidget w1;\nWidget w2(w1);<\/code><\/pre>\n\n\n\n<p>\u56e0\u6b64\u4e00\u5b9a\u8981\u81ea\u5df1\u91cd\u65b0\u5199\u4e00\u4e2a\u6df1\u62f7\u8d1d\u3002<\/p>\n\n\n\n<p>\u540e\u7eed\u770b\u4e66\u7684\u8bdd\uff0c\u5176\u5b9e\u60f3\u8bf4\u660e\u7684\u662f\u53e6\u4e00\u4e2a\u95ee\u9898\u3002\u5373\u81ea\u5df1\u5b8c\u6210\u4e86\u62f7\u8d1d\u6784\u9020\u51fd\u6570\u548coperator=\u7684\u5b9e\u73b0\uff0c\u4f46\u662f\u65b0\u52a0\u53d8\u91cf\u65f6\u5019\u5fd8\u8bb0\u8865\u5145\u4e86\u3002\u3002<\/p>\n\n\n\n<p>\u5bf9\u4e8e\u8fd9\u4e2a\u95ee\u9898\uff0c\u6700\u4e25\u91cd\u7684\u70b9\u662f\u5fd8\u8bb0\u4e86\u57fa\u7c7b\u51fd\u6570\uff0c\u5177\u4f53\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class PriorityCustomer : public Customer {  \/\/ \u4e00\u4e2a\u6d3e\u751f\u7c7b\npublic:\n    ...\n    PriorityCustomer(const PriorityCustomer&amp; rhs);\n    PriorityCustomer&amp; operator=(const PriorityCustomer&amp; rhs);\n\nprivate:\n    int priority;\n};\n\n\/\/ \u62f7\u8d1d\u6784\u9020\u51fd\u6570\nPriorityCustomer::PriorityCustomer(const PriorityCustomer&amp; rhs) \n    : priority(rhs.priority)  \/\/ \u4ec5\u62f7\u8d1d\u6d3e\u751f\u7c7b\u7684\u6210\u5458\u53d8\u91cf\n{\n    logCall(\"PriorityCustomer copy constructor\");\n}\n\n\/\/ \u62f7\u8d1d\u8d4b\u503c\u8fd0\u7b97\u7b26\nPriorityCustomer&amp; PriorityCustomer::operator=(const PriorityCustomer&amp; rhs) {\n    logCall(\"PriorityCustomer copy assignment operator\");\n    priority = rhs.priority;  \/\/ \u4ec5\u62f7\u8d1d\u6d3e\u751f\u7c7b\u7684\u6210\u5458\u53d8\u91cf\n    return *this;\n}<\/code><\/pre>\n\n\n\n<p>\u7531\u4e8e\u62f7\u8d1d\u6784\u9020\u51fd\u6570\u548c\u62f7\u8d1d\u8d4b\u503c\u8fd0\u7b97\u7b26\u4e2d\u6ca1\u6709\u5904\u7406\u57fa\u7c7bCustomer\uff0c\u5c06\u8981\u8c03\u7528\u9ed8\u8ba4\u7684\u62f7\u8d1d\u6784\u9020\u51fd\u6570\u4e86\uff0c\u53ef\u80fd\u5bfc\u81f4\u57fa\u7c7b\u90e8\u5206\u6570\u636e\u6ca1\u6709\u6b63\u786e\u7684\u590d\u5236\u3002<\/p>\n\n\n\n<p>\u89e3\u51b3\u65b9\u6cd5\uff1a\u5728\u6d3e\u751f\u7c7b\u7684\u62f7\u8d1d\u6784\u9020\u51fd\u6570\u548c\u62f7\u8d1d\u8d4b\u503c\u8fd0\u7b97\u7b26\u4e2d\uff0c<strong>\u663e\u5f0f\u8c03\u7528\u57fa\u7c7b<\/strong>\uff0c\u5373\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u4fee\u590d\u540e\u7684\u62f7\u8d1d\u6784\u9020\u51fd\u6570\nPriorityCustomer::PriorityCustomer(const PriorityCustomer&amp; rhs)\n    : Customer(rhs),  \/\/ \u663e\u5f0f\u8c03\u7528\u57fa\u7c7b\u7684\u62f7\u8d1d\u6784\u9020\u51fd\u6570\n      priority(rhs.priority)\n{\n    logCall(\"PriorityCustomer copy constructor\");\n}\n\n\/\/ \u4fee\u590d\u540e\u7684\u62f7\u8d1d\u8d4b\u503c\u8fd0\u7b97\u7b26\nPriorityCustomer&amp; PriorityCustomer::operator=(const PriorityCustomer&amp; rhs) {\n    logCall(\"PriorityCustomer copy assignment operator\");\n    if (this != &amp;rhs) {  \/\/ \u68c0\u67e5\u81ea\u8d4b\u503c\n        Customer::operator=(rhs);  \/\/ \u663e\u5f0f\u8c03\u7528\u57fa\u7c7b\u7684\u8d4b\u503c\u8fd0\u7b97\u7b26\n        priority = rhs.priority;   \/\/ \u62f7\u8d1d\u6d3e\u751f\u7c7b\u7684\u6210\u5458\u53d8\u91cf\n    }\n    return *this;\n}<\/code><\/pre>\n\n\n\n<p>\u6b64\u65f6\u770b\u5230\uff0c\u4e24\u4e2a\u6784\u9020\u51fd\u6570\u6709\u8bf8\u591a\u76f8\u4f3c\u4e4b\u5904\u554a\u3002<strong>\u662f\u5426\u53ef\u4ee5\u5199\u4e00\u4e2a\uff0c<strong>\u53e6\u4e00\u4e2a<\/strong>\u518d\u8c03\u7528\uff1f\u4e0d\u53ef\u4ee5\uff01<\/strong><\/p>\n\n\n\n<p>\u6784\u9020\u51fd\u6570\u7528\u4e8e\u521d\u59cb\u5316\u65b0\u5bf9\u8c61\uff0c\u800c\u8d4b\u503c\u8fd0\u7b97\u9002\u7528\u4e8e\u5df2\u7ecf\u521d\u59cb\u5316\u7684\u5bf9\u8c61\u3002\u4e8c\u8005\u51b2\u7a81\u7684<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u8d44\u6e90\u7ba1\u7406<\/h2>\n\n\n\n<p>\u8d44\u6e90\u662f\u6307\u4e00\u65e6\u7528\u5b8c\uff0c\u5c31\u9700\u8981\u8fd4\u56de\u7cfb\u7edf\u7684\u4e1c\u897f\u3002\/\u5982\u9501\uff0c\u7ebf\u7a0b\uff0c\u6570\u636e\u5e93\u7b49<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u5bf9\u8c61\u7ba1\u7406\u8d44\u6e90<\/h3>\n\n\n\n<p>\u5bf9\u4e8e\u4f20\u7edf\u6307\u9488\uff0c\u53ef\u80fd\u5b58\u5728\u5185\u5b58\u6cc4\u6f0f\u98ce\u9669\u3002e.g<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Investment* pInv = createInvestment();  \/\/ \u8c03\u7528\u5de5\u5382\u51fd\u6570\n\/\/ ... \u4f7f\u7528 pInv\ndelete pInv;  \/\/ \u91ca\u653e\u5bf9\u8c61<\/code><\/pre>\n\n\n\n<p>\u5047\u8bbe\u4e2d\u95f4\u51fa\u9519\uff0cthrow\u4e86\u9000\u51fa\u4e86\u3002\u90a3\u4e48\u6839\u672c\u7b49\u4e0d\u5230delete\u91ca\u653e\uff0c\u76f4\u63a5\u5c31\u5bfc\u81f4\u5185\u5b58\u6cc4\u6f0f\uff0c\u540c\u65f6delete\u4e5f\u6709\u5f88\u591a\u4eba\u4e0d\u5199\uff08\u5fd8\u8bb0\u4e86\uff09<\/p>\n\n\n\n<p>\u89e3\u51b3\u5c31\u662f\u7528\u667a\u80fd\u6307\u9488\uff0c\u8d85\u51fa\u4f5c\u7528\u57df\u4e4b\u540e\uff0c\u81ea\u52a8\u6790\u6784\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>std::unique_ptr&lt;Investment&gt; pInv(createInvestment());  \/\/ \u8c03\u7528\u5de5\u5382\u51fd\u6570\n\/\/ ... \u4f7f\u7528 pInv\n\/\/ \u79bb\u5f00\u4f5c\u7528\u57df\u65f6\uff0cstd::unique_ptr \u7684\u6790\u6784\u51fd\u6570\u4f1a\u81ea\u52a8\u8c03\u7528 delete<\/code><\/pre>\n\n\n\n<p>\u4f7f\u7528\u8fd9\u79cd\u5bf9\u8c61\u8d44\u6e90\u7ba1\u7406\u7684\u60f3\u6cd5\u88ab\u79f0\u4e3a\u8d44\u6e90\u83b7\u53d6\u5373\u521d\u59cb\u5316\uff08RAII\uff09<\/p>\n\n\n\n<p>unique_ptr\u53ef\u4ee5\u4fdd\u8bc1\u8d44\u6e90\u72ec\u5360\uff0c\u5373\u5185\u90e8\u4f60\u7684\u8d44\u6e90\u548c\u6307\u9488\u552f\u4e00\u5bf9\u5e94\u7684\u3002\u5f53\u7136\u540e\u7eed\u8fd8\u6709shared_ptr,weak_ptr\u8fd9\u4e9b\uff0c\u5177\u4f53\u542b\u4e49\u4e0d\u8d58\u8ff0\uff0c\u4ee5\u524d\u5199\u8fc7\u53ef\u89c1\u4e0b\u6587\uff1a<\/p>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>\u8be6\u7ec6\u53ef\u89c1<\/summary>\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<p><strong>\u667a\u80fd\u6307\u9488<\/strong><\/p>\n\n\n\n<p>\u4e3a\u4ec0\u4e48\u6709\uff1f\u56e0\u4e3a\u5f88\u591a\u7a0b\u5e8f\u5458\u7533\u8bf7\u6307\u9488\u540e\uff0c\u5fd8\u8bb0\u91ca\u653e\uff0c\u5bfc\u81f4\u5185\u5b58\u6cc4\u9732\u3002<br>\u667a\u80fd\u6307\u9488\u53ef\u4ee5\u5f88\u5927\u7a0b\u5ea6\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u5176\u672c\u8d28\u5c31\u662f\u4e00\u4e2a\u7c7b\uff0c\u8d85\u51fa\u4f5c\u7528\u57df\u540e\u81ea\u52a8\u91ca\u653e\u8d44\u6e90\uff0c\u907f\u514d\u8fd9\u4e2a\u95ee\u9898\u3002<\/p>\n\n\n\n<p><strong>auto_ptr\uff08\u6240\u6709\u6743\uff09<\/strong><\/p>\n\n\n\n<p>\u6bcf\u4e00\u4e2a\u6307\u9488\u662f\u552f\u4e00\u7684\u62e5\u6709\u8005\u3002\u540e\u7eed\u5df2\u7ecf\u5e9f\u5f03<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>auto_ptr&lt;std::string&gt; p1 (new string (\"hello\"));\nauto_ptr&lt;std::string&gt; p2;\np2 = p1; \/\/auto_ptr \u4e0d\u4f1a\u62a5\u9519\ncout &lt;&lt; *p1 ; \/\/ \u70b8\u4e86<\/code><\/pre>\n\n\n\n<p>\u4e3a\u4ec0\u4e48\u4f1a\u8fd9\u6837\uff1f\u56e0\u4e3a\u6839\u636e\u8bbe\u8ba1\u7406\u5ff5\uff0c\u4f60\u5df2\u7ecf\u628a\u6240\u6709\u6743\u7ed9p2\u4e86\uff0c\u90a3\u4f60\u7684p1\u5c31\u6ca1\u7528\u4e86\uff0c\u5e94\u8be5\u53bb\u91ca\u653e\u3002\u540c\u65f6\uff0c\u5982\u679c\u6307\u5411\u8d44\u6e90\uff0c\u90a3\u4f60\u591a\u4e2a\u667a\u80fd\u6307\u9488\u6307\u5411\u540c\u4e00\u4e2a\uff0c\u8d44\u6e90\u5c31\u4f1a\u88ab\u91ca\u653e\u591a\u6b21\u3002<\/p>\n\n\n\n<p><strong>unique_ptr<\/strong><\/p>\n\n\n\n<p>\u4e3a\u4e86\u89e3\u51b3\u4e0a\u9762\u7684\u95ee\u9898\uff0c\u8fd9\u91cc<strong>\u4e0d\u80fd\u591f\u76f4\u63a5\u901a\u8fc7 = \u6765\u8d4b\u503c<\/strong>\uff0c\u5fc5\u987b\u901a\u8fc7move\u6765\u8f6c\u8bd1\u63a7\u5236\u6743\u3002\u4e00\u5b9a\u7a0b\u5ea6\u4e0a\u4fdd\u8bc1\u4e86\u5b89\u5168\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>unique_ptr&lt;string&gt; p3 (new string (auto));\/\/#4\nunique_ptr&lt;string&gt; p4\uff1b\/\/#5\np4 = p3;\/\/\u6b64\u65f6\u4f1a\u62a5\u9519<\/code><\/pre>\n\n\n\n<p><strong>shared_ptr<\/strong><\/p>\n\n\n\n<p>unique_ptr\u7528\u7740\u4e0d\u65b9\u4fbf\uff0c\u6709\u65f6\u5019\u786e\u5b9e\u8981\u591a\u4e2a\u6307\u3002<br>\u56e0\u6b64\u4f7f\u7528shared_ptr\u5171\u540c\u7ba1\u7406\u8d44\u6e90\uff0c\u90a3\u600e\u4e48\u5b9e\u73b0\u8fd9\u4e2a\u201c\u667a\u80fd\u6307\u9488\u201d\u5462\uff1f\u8fd9\u91cc\u4f1a\u5f15\u5165\u8ba1\u6570\u5668\uff0c<strong>\u5f53\u6240\u6709\u7684shared_ptr\u90fd\u88ab\u9500\u6bc1\uff0c\u90a3\u5b83\u5c31\u4f1a\u91ca\u653e\u7ba1\u7406\u7684\u5185\u5b58<\/strong>\u3002<br>\u90a3\u4e48\u4e3a\u4ec0\u4e48\u8981make_shared?\u8fd9\u4e2a\u5c31\u76f8\u5f53\u4e8e\u76f4\u63a5\u6784\u9020\u4e86\uff0c<\/p>\n\n\n\n<p>\u95ee\u9898\uff1a\u4e24\u4e2a\u4e92\u76f8\u5f15\u7528\uff0c\u4e0d\u5c31\u6c38\u8fdc\u65e0\u6cd5\u91ca\u653e\u4e86\uff1f<\/p>\n\n\n\n<p><strong>weak_ptr<\/strong><\/p>\n\n\n\n<p>\u4e3a\u4e86\u89e3\u51b3shared_ptr\u53ef\u80fd\u7684\u5faa\u73af\u5f15\u7528\u95ee\u9898\uff0c\u7528\u4e00\u4e2a<strong>weak_ptr\u8f85\u52a9shared_ptr<\/strong>\u3002<br>\u7279\u70b9\uff1a\u4f5c\u4e3a\u89c2\u5bdf\u8005\uff0c\u4e0d\u4f1a\u7ed9shared_ptr\u589e\u52a0\u8ba1\u6570\uff0c\u4f46\u4e5f<strong>\u4e0d\u53ef\u4ee5\u8bbf\u95ee\u8d44\u6e90<\/strong>\uff0c\u53ea\u80fd\u770b\u8d44\u6e90\u6709\u6ca1\u6709\u88ab\u91ca\u653e\u3002\u5982\u679c\u8981\u4f7f\u7528\u8d44\u6e90\u9700\u8981\u901a\u8fc7Lock\u65b9\u6cd5\u8f6c\u5316\u4e3ashared_ptr\u624d\u53ef\u4ee5\uff08\u6b64\u65f6\u4fbf\u4e0d\u4f1a\u6709\u5faa\u73af\u5f15\u7528\uff0c\u56e0\u4e3a\u8f6c\u5316\u7684\u5148\u88ab\u91ca\u653e\u56de\u53bb\uff0c\u4e0d\u5f71\u54cd\u539f\u5148\u53e6\u4e00\u4e2ashared_ptr\uff09\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;iostream&gt;\n#include &lt;memory&gt;\n\nclass A;\nclass B;\n\nclass A {\npublic:\n    std::shared_ptr&lt;B&gt; b_ptr; \/\/ A \u6301\u6709 B \u7684 shared_ptr\n};\n\nclass B {\npublic:\n    std::weak_ptr&lt;A&gt; a_ptr;   \/\/ B \u6301\u6709 A \u7684 weak_ptr\n};\n\nint main() {\n    std::shared_ptr&lt;A&gt; a = std::make_shared&lt;A&gt;();\n    std::shared_ptr&lt;B&gt; b = std::make_shared&lt;B&gt;();\n\n    a-&gt;b_ptr = b;  \/\/ A \u6301\u6709 B\n    b-&gt;a_ptr = a;  \/\/ B \u6301\u6709 A \u7684 weak_ptr\uff08\u4e0d\u589e\u52a0\u5f15\u7528\u8ba1\u6570\uff09\n\n    \/\/ \u5230\u8fd9\u91cc\uff0ca \u548c b \u7684\u5f15\u7528\u8ba1\u6570\u90fd\u4e3a 1\n    return 0; \/\/ \u7a0b\u5e8f\u7ed3\u675f\u65f6\uff0c\u8d44\u6e90\u6b63\u5e38\u91ca\u653e\n}<\/code><\/pre>\n<\/div><\/div>\n<\/details>\n\n\n\n<p>unique_ptr\u6709\u4e00\u4e2a\u9488\u5bf9\u6570\u7ec4\u7684\u504f\u7279\u5316\uff0c\u8be5\u504f\u7279\u5316\u63d0\u4f9b\u4e86\u9488\u5bf9\u6570\u7ec4\u7684\u4e0b\u6807\u64cd\u4f5c\u7b26[]\uff0c\u56e0\u6b64\u53ef\u4ee5\u6b63\u5e38\u91ca\u653e\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>std::unique_ptr&lt;std::string&#91;]&gt; aps(new std::string&#91;10]);\nstd::shared_ptr&lt;int&gt; spi(new int&#91;1024]);\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u5728\u8d44\u6e90\u7ba1\u7406\u7c7b\u4e2d\u5c0f\u5fc3\u62f7\u8d1d\u884c\u4e3a<\/h3>\n\n\n\n<p>\u4f8b\u5982\u5982\u4e0b\u8d44\u6e90\u7ba1\u7406\uff0c\u6211\u4eec\u6709lock\uff0c\u548c\u7ba1\u7406lock\u7684\u5de5\u5177\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void lock(Mutex* pm);    \/\/ \u9501\u5b9apm\u6307\u5411\u7684\u4e92\u65a5\u91cf\nvoid unlock(Mutex* pm);  \/\/ \u4e92\u65a5\u91cf\u89e3\u9501\n\nclass Lock {\npublic:\n    explicit Lock(Mutex* pm) : mutexPtr(pm) {\n        lock(mutexPtr);  \/\/ \u9501\u5b9apm\u6307\u5411\u7684\u4e92\u65a5\u91cf\n    }\n    ~Lock() { \n        unlock(mutexPtr); \/\/ \u91ca\u653e\u8d44\u6e90\n    }\nprivate:\n    Mutex* mutexPtr;\n};<\/code><\/pre>\n\n\n\n<p>\u6b63\u5e38\u60c5\u51b5\u4e0b\u6ca1\u6709\u95ee\u9898\uff0c\u4f46\u662f\uff0c\u5982\u679c\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Lock ml1(&amp;m); \/\/ \u9501\u4f4f m\nLock ml2(ml1); \/\/ \u5c06 ml1 \u590d\u5236\u5230 ml2\uff0c\u8fd9\u91cc\u4f1a\u53d1\u751f\u4ec0\u4e48?<\/code><\/pre>\n\n\n\n<p>\u6700\u7ec8\u7ed3\u679c\u662f\uff0c\u88ab\u9501\u4f4f\u4e00\u6b21\uff0c\u7136\u540e\u88ab\u91ca\u653e\u4e24\u6b21\u3002\u8fd9\u6837\u5f88\u53ef\u80fd\u5bfc\u81f4\u4e00\u4e9b\u672a\u5b9a\u4e49\u884c\u4e3a\u3002<\/p>\n\n\n\n<p>\u89e3\u51b3\u65b9\u6cd5\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u7981\u6b62\u590d\u5236\u3002\u5982\u679c\u5bf9\u4e8eRAII\u5bf9\u8c61\u6765\u8bf4\uff0c\u590d\u5236\u6ca1\u6709\u610f\u4e49\uff0c\u90a3\u4e48\u5c31\u5e94\u8be5\u7981\u6b62\u8fd9\u79cd\u884c\u4e3a<\/li>\n\n\n\n<li>\u5f15\u7528\u8ba1\u6570\u5668\u3002\u4f8b\u5982\u7c7b\u4f3cshared_ptr\uff0c\u53ea\u6709\u6240\u6709\u5f15\u7528\u90fd\u6ca1\u4e86\u624d\u8c03\u7528\u6700\u7ec8\u7684\u6790\u6784\uff0c\u6216\u8fd9\u91cc\u7684unlock\u3002<\/li>\n\n\n\n<li>\u590d\u5236\u5e95\u90e8\u8d44\u6e90\uff08deepcopy\uff09<\/li>\n\n\n\n<li>\u8f6c\u79fb\u5e95\u90e8\u8d44\u6e90\u6240\u6709\u6743\uff0c\u7c7b\u4f3cunique_ptr\uff0c\u4fdd\u8bc1\u6240\u6709\u6743\u552f\u4e00\u3002<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>class Lock {\npublic:\n    explicit Lock(Mutex* pm)  \/\/ \u7528\u4e92\u65a5\u91cf\u548c unlock \u51fd\u6570\u521d\u59cb\u5316 shared_ptr\n        : mutexPtr(pm, unlock) \/\/ unlock \u4f5c\u4e3a\u5220\u9664\u5668\n    {\n        lock(mutexPtr.get());  \/\/ \u83b7\u53d6\u666e\u901a\u6307\u9488\u5e76\u9501\u4f4f\u4e92\u65a5\u91cf\n    }\n\nprivate:\n    std::shared_ptr&lt;Mutex&gt; mutexPtr; \/\/ \u4f7f\u7528 shared_ptr \u4ee3\u66ff\u666e\u901a\u6307\u9488\n};\n\nMutex m; \/\/ \u5b9a\u4e49\u4f60\u9700\u8981\u4f7f\u7528\u7684\u4e92\u65a5\u91cf<\/code><\/pre>\n\n\n\n<p>\u8fd9\u91cc\u7684\u5220\u9664\u5668\u6307\u7684\u662f\u4f1a\u5728\u5f7b\u5e95\u6ca1\u6709\u5f15\u7528\u4e4b\u540e\u8c03\u7528\u7684\u51fd\u6570\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u5728\u8d44\u6e90\u7ba1\u7406\u7c7b\u4e2d\u63d0\u4f9b\u5bf9\u539f\u59cb\u8d44\u6e90\u7684\u7ba1\u7406\u8bbf\u95ee<\/h3>\n\n\n\n<p>\u8fd9\u4e2a\u662f\u6307\u7684\uff0c\u4e4b\u524d\u6211\u4eec\u4f7f\u7528\u667a\u80fd\u6307\u9488\u53bb\u7ba1\u7406\u8d44\u6e90\u3002\u4f46\u662f\u5982\u679c\u6211\u4eec\u4e4b\u524d\u5199\u7684\u51fd\u6570\u5c31\u662f\u9700\u8981\u539f\u59cb\u6307\u9488\uff0c\u6211\u4eec\u9700\u8981\u600e\u4e48\u529e\u5462\uff1f<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>std::shared_ptr&lt;Investment&gt; pInv(createInvestment()); \/\/ \u6765\u81ea\u6761\u6b3e13\nint daysHeld(const Investment* pi); \/\/ \u8fd4\u56de\u6295\u8d44\u7684\u5df2\u6301\u6709\u5929\u6570\nint days = daysHeld(pInv); \/\/ \u9519\u8bef\uff01\u53c2\u6570\u7c7b\u578b\u4e0d\u5339\u914d\n\/\/ int days = daysHeld(pInv.get()); \/\/ \u53ef\u4ee5\uff0c\u5c06 pInv \u4e2d\u7684\u539f\u59cb\u6307\u9488\u4f20\u9012\u7ed9 daysHeld<\/code><\/pre>\n\n\n\n<p>\u8fd9\u65f6\u5019\u6211\u4eec\u53ef\u4ee5\u8c03\u7528get\u63a5\u53e3\uff0c\u83b7\u53d6\u539f\u59cb\u7684\u8d44\u6e90\u3002\u8fd9\u91cc\u4e5f\u5c31\u662f\u60f3\u8bf4\u660e\u8fd9\u4e2a\u4e8b\u60c5\uff0c\u8ba9\u6211\u4eec\u5728\u5199\u8fd9\u79cd\u8d44\u6e90\u7ba1\u7406\u7c7b\u7684\u65f6\u5019\uff0c\u4e5f\u9700\u8981\u63d0\u4f9b\u539f\u59cb\u7684\u8d44\u6e90\u8bbf\u95ee\u63a5\u53e3\u3002<\/p>\n\n\n\n<p>\u8fd9\u65f6\u5019\u5c31\u6709\u4e24\u79cd\u65b9\u5f0f\uff0c\u4e00\u79cd\u662f\u663e\u5f0f\u4e00\u79cd\u662f\u9690\u5f0f\u7684\u3002\u663e\u5f0f\u5c31\u662f\u901a\u8fc7\u63d0\u4f9b\u76f4\u63a5get\u7684\u65b9\u5f0f\u83b7\u53d6\u8d44\u6e90\uff0c\u9690\u5f0f\u662f\u901a\u8fc7\u64cd\u4f5c\u7b26\u91cd\u8f7d\u800c\u6765\u7684\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Font {\npublic:\n    FontHandle get() const { return f; } \/\/ \u663e\u5f0f\u8f6c\u6362\u51fd\u6570\n    operator FontHandle() const { return f; } \/\/ \u9690\u5f0f\u8f6c\u6362\u51fd\u6570\nprivate:\n    FontHandle f; \/\/ \u539f\u59cb\u7684\u5b57\u4f53\u8d44\u6e90\n};\n\nvoid changeFontSize(FontHandle f, int newSize); \/\/ \u6539\u53d8\u5b57\u4f53\u5927\u5c0f\nchangeFontSize(f.get(), newFontSize); \/\/ \u660e\u786e\u5730\u5c06 Font \u8f6c\u6362\u4e3a FontHandle\nchangeFontSize(f, newFontSize); \/\/ \u9690\u5f0f\u5730\u5c06 Font \u8f6c\u6362\u4e3a FontHandle<\/code><\/pre>\n\n\n\n<p>\u9690\u5f0f\u8bbf\u95ee\u53ef\u80fd\u5bfc\u81f4\u51fa\u9519\u51e0\u7387\u589e\u52a0<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Font f1(getFont());\nFontHandle f2 = f1;  \/\/ \u7c7b\u578b\u4e0d\u5c0f\u5fc3\u5199\u9519\u4e86\uff0c\u672c\u6765\u5e94\u5f53\u521b\u5efa\u5bf9\u8c61\u7ed3\u679c\u53d8\u6210\u4e86\u9690\u5f0f\u8f6c\u5316FontHandle\u5bf9\u8c61\n                     \/\/ \u7f16\u8bd1\u5668\u4e5f\u8ba4\u4e3a\u6ca1\u95ee\u9898\uff0c\u9ed8\u9ed8\u8f6c\u6362<\/code><\/pre>\n\n\n\n<p>\u603b\u7ed3\u4e00\u4e0b\uff1a<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-3e3d28f576eb9f24616372d78d06948b\">\u6bcf\u4e2aRAII\u7c7b\u90fd\u5e94\u8be5\u63d0\u4f9b\u65b9\u6cd5\u6765\u83b7\u53d6\u4ed6\u7ba1\u7406\u7684\u8d44\u6e90<br>\u8bbf\u95ee\u53ef\u4ee5\u9690\u5f0f\u6216\u8005\u663e\u5f0f\u3002\u663e\u5f0f\u66f4\u52a0\u5b89\u5168\uff0c\u9690\u5f0f\u53ef\u80fd\u65b9\u4fbf\u4e9b\uff0c\u4f46\u662f\u8981\u683c\u5916\u6ce8\u610f\u4e00\u4e9b\u95ee\u9898\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u6210\u5bf9\u7684\u4f7f\u7528 new \u548c delete \u65f6\u9700\u8981\u91c7\u7528\u76f8\u540c\u7684\u5f62\u5f0f<\/h3>\n\n\n\n<p>\u4e3b\u8981\u662f\u8bf4\u660e\u666e\u901a\u5bf9\u8c61\u548c\u6570\u7ec4\u5bf9\u8c61\u7684\uff0c\u4e3e\u4f8b\u6765\u8bf4\uff1a<\/p>\n\n\n\n<p>string * stringArray = new string[100]\uff1b<br>delete stringArray\uff1b\/\/\u9519\u8bef<br>delete [] stringPtr2; \/\/\u5220\u9664\u6570\u7ec4<\/p>\n\n\n\n<p>\u539f\u7406\u5982\u4e0b\uff0c\u6211\u4eec\u9700\u8981\u663e\u793a\u7684\u6307\u660e\u662f\u54ea\u4e00\u79cd\uff0c\u7f16\u8bd1\u5668\u624d\u77e5\u9053\u53bb\u505a\u4ec0\u4e48<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/www.haruhi.fans\/wp-content\/uploads\/2025\/05\/image-26.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"792\" height=\"140\" data-original=\"https:\/\/www.haruhi.fans\/wp-content\/uploads\/2025\/05\/image-26.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-3962\" style=\"width:529px;height:auto\"  sizes=\"auto, (max-width: 792px) 100vw, 792px\" \/><\/div><\/figure>\n\n\n\n<p>\u5bf9\u4e8e\u4f7f\u7528typedef\uff0c\u8fd9\u70b9\u9700\u8981\u683c\u5916\u6ce8\u610f\u3002\u5728delete\u65f6\u5019\uff0c\u5e94\u8be5\u4e3a\u4f60\u5b9e\u9645\u7684\u6570\u636e\u7c7b\u578b\uff0c\u800c\u4e14\u7f16\u8bd1\u5668\u4e5f\u4e0d\u4f1a\u63d0\u9192\u62a5\u9519\u3002\u56e0\u6b64<strong>\u5c31\u5efa\u8bae\u5c31\u4e0d\u8981\u7528typedef<\/strong>\uff0c\u8001\u8001\u5b9e\u5b9e\u6362\u6210vector\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>typedef string AddressLines&#91;4];\n    string *pal = new AddressLines;\n    delete pal;      \/\/ \u672a\u5b9a\u4e49\n    delete &#91;] pal;   \/\/ \u6b63\u786e<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u4ee5\u72ec\u7acb\u7684\u8bed\u53e5\u5c06new\u51fa\u6765\u7684\u5bf9\u8c61\u7f6e\u4e8e\u667a\u80fd\u6307\u9488<\/h3>\n\n\n\n<p>\u8003\u8651\u4e0b\u9762\u4e00\u4e2a\u8bed\u53e5<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int priority();\nvoid processWidget(std::shared_ptr&lt;Widget&gt; pw, int priority);\n\nprocessWidget(new Widget, priority()); \/\/ \u9519\u8bef\uff0c\u53c2\u6570\u7c7b\u578b\u4e0d\u5339\u914d\nprocessWidget(std::shared_ptr&lt;Widget&gt;(new Widget), priority()); \/\/ \u6b63\u786e<\/code><\/pre>\n\n\n\n<p>\u8fd9\u91cc\u7684\u9519\u8bef\u5e76\u4e0d\u662f\u91cd\u70b9\uff08\u53ea\u662f\u63d0\u9192\u4e00\u4e0b\u6ce8\u610f\u7c7b\u578b\u6b63\u786e\uff09\uff0c\u91cd\u70b9\u662f\u8fd9\u4e2a\u6b63\u786e\u7684\u8bed\u53e5\uff0c\u4ed6\u8981\u6267\u884c\u4e09\u4e2a\u8fc7\u7a0b\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8c03\u7528 priority() \u51fd\u6570\u4ee5\u83b7\u53d6\u4f18\u5148\u7ea7\u3002<\/li>\n\n\n\n<li>\u6267\u884c new Widget \u521b\u5efa\u4e00\u4e2a\u52a8\u6001\u5206\u914d\u7684\u5bf9\u8c61\u3002<\/li>\n\n\n\n<li>\u8c03\u7528 std::shared_ptr \u7684\u6784\u9020\u51fd\u6570\u4ee5\u7ba1\u7406 new Widget\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u95ee\u9898\u662f\uff0cC++\u7f16\u8bd1\u5668\u53ef\u4ee5\u81ea\u8eab\u81ea\u7531\u51b3\u5b9a\u8fd9\u4e9b\u64cd\u4f5c\u7684\u987a\u5e8f\uff0c\u5e76\u4e0d\u56fa\u5b9a\uff0c\u5982\u679c\u5148new\u5bf9\u8c61\uff0c\u518dpriority\uff0c\u518dshared_ptr \u8fd9\u4e2a\u987a\u5e8f\uff0c\u5982\u679cpriority\u8fc7\u7a0b\u51fa\u73b0\u5f02\u5e38\uff0c\u5219\u5c31\u4f1a\u5185\u5b58\u6cc4\u6f0f\u3002<\/p>\n\n\n\n<p>\u4e3a\u4e86\u907f\u514d\uff0c\u8fd9\u91cc\u610f\u601d\u5c31\u662f\u5206\u5f00\u5199\uff0c\u53d8\u6210\u72ec\u7acb\u8bed\u53e5\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>std::shared_ptr&lt;Widget&gt; pw(new Widget);\nprocessWidget(pw, priority());<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u8bbe\u8ba1\u4e0e\u58f0\u660e<\/h2>\n\n\n\n<p>\u8f6f\u4ef6\u8bbe\u8ba1\u662f\u8ba9\u8f6f\u4ef6\u505a\u4f60\u60f3\u8981\u8ba9\u5b83\u505a\u7684\u4e8b\u60c5\u7684\u65b9\u6cd5\u3002\u901a\u5e38\u5f00\u59cb\u53ea\u662f\u4e00\u822c\u7684\u60f3\u6cd5\uff0c\u8bbe\u8ba1\u63a5\u53e3\uff0c\u6700\u540e\u518d\u5b9e\u73b0\u3002\u5728C++\u4e2d\uff0c\u8fd9\u4e9b\u63a5\u53e3\u5c31\u662fC++\u7684\u58f0\u660e\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u8ba9\u63a5\u53e3\u5bb9\u6613\u88ab\u6b63\u786e\u4f7f\u7528\uff0c\u4e0d\u6613\u88ab\u8bef\u7528<\/h3>\n\n\n\n<p>\u8fd9\u4e2a\u633a\u5b9e\u5728\u7684\uff0c\u4ed6\u60f3\u8bf4\u7684\u662f\u4e0b\u9762\u8fd9\u79cd\u60c5\u51b5<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Date {\npublic:\n    Date(int month, int day, int year);\n    ...\n};\n\nDate d(30, 3, 1995);  \/\/ \u9519\u8bef\uff1a\u5e94\u8be5\u662f \"3, 30\"\uff0c\u800c\u4e0d\u662f \"30, 3\"\nDate d2(2, 30, 1995); \/\/ \u9519\u8bef\uff1a\u5e94\u8be5\u662f \"3, 30\"\uff0c\u800c\u4e0d\u662f \"2, 30\"<\/code><\/pre>\n\n\n\n<p>\u7531\u4e8e\u4f7f\u7528\u4e0d\u5f53\uff0c\u5bfc\u81f4\u9519\u8bef\u4f20\u53c2\u4ece\u800c\u5bfc\u81f4\u9519\u8bef\u3002\u8fd9\u79cd\u9519\u8bef\u786e\u5b9e\u5982\u679c\u6709\u7684\u8bdd\u5c31\u662f\u6bd4\u8f83\u6df1\u7684\u95ee\u9898\u4e86\u3002\u867d\u7136\u73b0\u4ee3\u7f16\u8bd1\u5668\u4f1a\u6709\u63d0\u9192\u5bf9\u5e94\u53c2\u6570\uff08\u5982\u4e0b\u65b9clion\uff09\uff0c\u4f46\u662f\u6bd5\u7adf\u4e0d\u62a5\u9519\u3002\u4e2a\u4eba\u611f\u89c9\u6bd4\u8f83\u7406\u60f3\u7684\u65b9\u5f0f\u662f\u7c7b\u4f3c\u4e8epython\uff0c\u53ef\u4ee5\u76f4\u63a5\u6307\u5b9a\u4f8b\u5982 day=10\u8fd9\u79cd\uff0c\u4f46\u6bd5\u7adfc++\u5bf9\u53c2\u6570\u987a\u5e8f\u4e4b\u7c7b\u4e25\u683c\u8981\u6c42\uff0c\u8fd8\u662f\u66f4\u52a0\u6ce8\u610f\u4e00\u4e9b\u6bd4\u8f83\u597d\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/www.haruhi.fans\/wp-content\/uploads\/2025\/05\/image-27.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"905\" height=\"295\" data-original=\"https:\/\/www.haruhi.fans\/wp-content\/uploads\/2025\/05\/image-27.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-3965\" style=\"width:516px;height:auto\"  sizes=\"auto, (max-width: 905px) 100vw, 905px\" \/><\/div><\/figure>\n\n\n\n<p>C++\u4e2d\u89e3\u51b3\u65b9\u5f0f\u662f\u5bf9\u6bcf\u4e00\u4e2a\u6570\u636e\u5f15\u5165\u65b0\u7684\u7c7b\u578b\uff0c\u8fd9\u6837\u4fbf\u4e0d\u5bb9\u6613\u51fa\u9519\u4e86\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>struct Day {\n    explicit Day(int d) : val(d) {}\n    int val;\n};\nstruct Month {\n    explicit Month (int d) : val(d) {}\n    int val;\n};\nstruct Year {\n    explicit Year (int d) : val(d) {}\n    int val;\n};\n\nclass Date {\npublic:\n    Date(Month month, Day day, Year year);\n    ...\n};<\/code><\/pre>\n\n\n\n<p>\u73b0\u5728\u5c31\u53ea\u80fd\u901a\u8fc7\u6b63\u786e\u7684\u65b9\u5f0f\u8bbf\u95ee\uff0c\u4e0d\u4f1a\u51fa\u9519\u4e86<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Date d(3, 30, 1995); \/\/ error\nDate d(Month(3), Day(30), Year(1995)); \/\/ \u6b63\u786e<\/code><\/pre>\n\n\n\n<p>\u5bf9\u4e8e\u667a\u80fd\u6307\u9488\u7684\u7ba1\u7406\u5bf9\u8c61\uff0c\u6700\u597d\u662f\u4f7f\u7528\u5982\u4e0b\u7684\u683c\u5f0f<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>std::shared_ptr&lt;Investment&gt; createInvestment() {\n    return std::shared_ptr&lt;Investment&gt;(new Stock);\n}<\/code><\/pre>\n\n\n\n<p>\u5f53\u7136\uff0cshared_ptr\u53ef\u80fd\u9047\u5230\u8de8DLL\u95ee\u9898\u3002DLL\u662f\u52a8\u6001\u94fe\u63a5\u5e93\uff0c\u5f53\u5b58\u5728\u8de8\u52a8\u6001\u94fe\u63a5\u5e93\uff0c\u5bf9\u4e8e\u5185\u5b58\u7684\u5206\u914d\u548c\u91ca\u653e\u673a\u5236\u53ef\u80fd\u4e0d\u540c\uff0c\u5bfc\u81f4\u4e0d\u53ef\u9884\u6d4b\u884c\u4e3a\u3002\u56e0\u6b64\uff0c\u901a\u8fc7shared_ptr\u4e5f\u53ef\u4ee5\u81ea\u5b9a\u4e49\u5220\u9664\u5668\uff0c\u89e3\u51b3\u8de8DLL\u95ee\u9898<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>std::shared_ptr&lt;Investment&gt; createInvestment() {\n    return std::shared_ptr&lt;Investment&gt;(new Stock, &#91;](Investment* p) { delete p; });\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u8bbe\u8ba1class\u72b9\u5982\u8bbe\u8ba1type<\/h3>\n\n\n\n<p>\u8bbe\u8ba1\u7684\u65f6\u5019\u4ece\u4e0a\u5230\u4e0b\u56de\u7b54\u8fd9\u4e9b\u95ee\u9898\uff0c\u4ece\u800c\u6765\u5f71\u54cd\u8bbe\u8ba1\u89c4\u8303<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5982\u4f55\u521b\u5efa\u548c\u9500\u6bc1\u65b0\u7c7b\u578b\u5bf9\u8c61\n<ul class=\"wp-block-list\">\n<li>\u6784\u9020\u6790\u6784\u51fd\u6570\u8bbe\u8ba1<\/li>\n\n\n\n<li>\u5185\u5b58\u5206\u914d\u548c\u91ca\u653e\u51fd\u6570\u7684\u8bbe\u8ba1\n<ul class=\"wp-block-list\">\n<li>operator new , operator new[]\uff0coperator delete\uff0coperator delete[]<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u5bf9\u8c61\u521d\u59cb\u5316\u548c\u8d4b\u503c\u7684\u533a\u522b\n<ul class=\"wp-block-list\">\n<li>\u521d\u59cb\u5316\u4ece\u65e0\u5230\u6709\uff0c\u8d4b\u503c\u662f\u4ece\u4e00\u4e2a\u5230\u53e6\u4e00\u4e2a\u3002\u5bf9\u4e8e\u62f7\u8d1d\u548c\u8d4b\u503c\u51fd\u6570\u4e0d\u8981\u641e\u6df7\u4e86\uff0c\u5bf9\u5e94\u4e0d\u540c\u7684\u884c\u4e3a\u3002\n<ul class=\"wp-block-list\">\n<li>\u8003\u8651\u6240\u6709\u6743\uff0c\u662f\u5426\u5206\u914d\u65b0\u7a7a\u95f4\u7b49\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u65b0\u7c7b\u578b\u7684\u5bf9\u8c61\u901a\u8fc7\u503c\u4f20\u9012\u8bf4\u660e\u4ec0\u4e48\uff1f\n<ul class=\"wp-block-list\">\n<li>\u5982\u901a\u8fc7 T t1\uff08t2\uff09 \u662f\u62f7\u8d1d\u6784\u9020\u51fd\u6570\u521b\u5efa\u7684\uff0c\u8981\u8003\u8651\u5bf9\u5e94\u884c\u4e3a\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u5bf9\u4e8e\u65b0\u7c7b\u578b\u5408\u6cd5\u503c\u7684\u9650\u5236\n<ul class=\"wp-block-list\">\n<li>\u7c7b\u6570\u636e\u6210\u5458\u53ea\u6709\u6709\u4e9b\u7ec4\u5408\u662f\u6709\u6548\u7684\u3002\u5bf9\u4e8e\u4e0d\u7b26\u5408\u7c7b\u7ea6\u675f\u6761\u4ef6\u7684\u5e94\u8be5\u5904\u7406\u6216\u8005\u629b\u51fa\u5f02\u5e38\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u65b0\u7c7b\u578b\u5141\u8bb8\u4ec0\u4e48\u6837\u7684\u7c7b\u578b\u8f6c\u5316\n<ul class=\"wp-block-list\">\n<li>\u5982\u679c\u5e0c\u671bT1\u7c7b\u578b\u5bf9\u9690\u5f0f\u8c61\u8f6c\u5316\u4e3aT2\uff0c\u90a3\u53ef\u4ee5\u5728T1\u4e2d\u5199\u4e00\u4e2a\u7c7b\u8f6c\u5316\u51fd\u6570\uff08\u5982\uff0coperator T2\uff0c\u5c31\u53ef\u4ee5\u505a\u5230\u8f6c\u5316\u4e3aT2\uff09\uff0c\u6216\u8005T2\u4e2d\u5199\u4e00\u4e2a\u975e\u663e\u5f0f\uff08non-explicit\uff09\u6784\u9020\u51fd\u6570<\/li>\n\n\n\n<li>class T2 {<br>public:<br>\/\/ \u975e\u663e\u5f0f\u6784\u9020\u51fd\u6570\uff0c\u63a5\u53d7 T1 \u7c7b\u578b\u5bf9\u8c61<br>    T2(const T1&amp; t1) : value_(t1.getValue()) {}<br>        <code>void display() const { std::cout &lt;&lt; \"T2 value: \" &lt;&lt; value_ &lt;&lt; std::endl; }<\/code><br>private:<br>    int value_;<br>};\n<ul class=\"wp-block-list\">\n<li>\u611f\u89c9\u8fd9\u91cc\u6709\u4e9b\u8fc7\u4e8e\u82b1\u6d3b\u4e86\uff0c\u771f\u7684\u5e73\u65f6\u6709\u4eba\u8981\u7528\u5417\uff1f<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u5982\u679c\u53ea\u5e0c\u671b\u663e\u5f0f\u8f6c\u6362\uff0c\u5c31\u5199\u4e13\u95e8\u7684\u51fd\u6570\u53bb\u505a\u8f6c\u6362\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u54ea\u4e9b\u8fd0\u7b97\u6cd5\u548c\u51fd\u6570\u5bf9\u65b0\u7c7b\u578b\u6709\u610f\u4e49\n<ul class=\"wp-block-list\">\n<li>\u7c7b\u9700\u8981\u54ea\u4e9b\u51fd\u6570\uff0c\u5c31\u53bb\u5199\u5bf9\u5e94\u7684\u51fd\u6570<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u54ea\u4e9b\u51fd\u6570\u8981\u88ab\u7981\u6b62\n<ul class=\"wp-block-list\">\n<li>= delete\u5220\u4e86<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u65b0\u7c7b\u578b\u6210\u5458\u53ef\u4ee5\u88ab\u8c01\u8c03\u7528\uff1f\n<ul class=\"wp-block-list\">\n<li>\u54ea\u4e9b\u662fpublic\uff0c\u662fprotect\uff0c\u662fprivate\u7684\u3002\u5e76\u786e\u5b9a\u54ea\u4e9b\u51fd\u6570or\u53d8\u91cf\u662f\u53cb\u5143\u3002\u7c7b\u5d4c\u5957\u4e00\u822c\u4e0d\u9700\u8981\u7528\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u65b0\u7c7b\u578b\u7684\u201c\u672a\u58f0\u660e\u63a5\u53e3\u201d\u662f\u4ec0\u4e48\uff1f\n<ul class=\"wp-block-list\">\n<li>\u770b\u4e0d\u61c2\u601d\u5bc6\u8fbe\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u65b0type\u591a\u4e48\u901a\u7528\uff1f\n<ul class=\"wp-block-list\">\n<li>\u6709\u65f6\u5019\u9700\u8981\u7684\u662f\u4e00\u4e2a\u7c7b\u578b\u65cf\uff0c\u56e0\u6b64\u9700\u8981\u53d6\u7528\u7c7b\u6a21\u677f\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u771f\u7684\u9700\u8981\u65b0\u7c7b\u578b\u5417\uff1f\n<ul class=\"wp-block-list\">\n<li>\u6709\u65f6\u5019\u5e76\u4e0d\u4e00\u5b9a\u9700\u8981\u591a\u52a0\u5165\u4e00\u4e2a\u6d3e\u751f\u7c7b\u5b9e\u73b0\u529f\u80fd\uff0c\u53ef\u80fd\u5b9a\u4e49\u51e0\u4e2a\u975e\u6210\u5458\u51fd\u6570\u53ef\u4ee5\u5b8c\u6210\uff08\u4f46\u8fd9\u4e0d\u662f\u53d8\u6210c\u90a3\u6837\u7684\u9762\u5411\u8fc7\u7a0b\uff1f\uff1f\uff1f\uff09<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u7528\u5e38\u91cf\u5f15\u7528\u4f20\u9012\u4f20\u9012\u66ff\u6362\u503c\u4f20\u9012<\/h3>\n\n\n\n<p>\u8fd9\u4e2a\u5012\u633a\u5e38\u89c1\u7684\u3002\u503c\u4f20\u9012\u5f00\u9500\u4f1a\u5927\uff0c\u56e0\u4e3a\u672c\u8d28\u662f\u8c03\u7528\u62f7\u8d1d\u6784\u9020\u51fd\u6570\u590d\u5236\u4e00\u4efd\uff0c\u7136\u540e\u7528\u5b8c\u8fd8\u8981\u6790\u6784\u3002const &amp; \u4f20\u9012\u660e\u663e\u63d0\u9ad8\u6548\u7387\uff0c\u672c\u8d28\u8fd8\u662f\u90a3\u4e2a\u53d8\u91cf\uff0c\u4e14\u4fdd\u8bc1\u4e0d\u4fee\u6539\u3002\u4e0d\u591a\u89e3\u91ca\u4e86\u3002<\/p>\n\n\n\n<p>\u540c\u65f6\u8fd8\u53ef\u4ee5\u907f\u514d\u4e00\u4e2a\u95ee\u9898\uff0c<strong>\u5207\u5272\u95ee\u9898<\/strong>\u3002\u7ee7\u627f\u7c7b\u4f5c\u4e3a\u57fa\u7c7b\u5bf9\u8c61\u4f20\u9012\u65f6\u5019\uff0c\u57fa\u7c7b\u7684\u62f7\u8d1d\u6784\u9020\u51fd\u6570\u8c03\u7528\uff0c\u90a3\u90a3\u4e9b\u6d3e\u751f\u7c7b\u7279\u6709\u7684\u90e8\u5206\u5c31\u88ab\u5207\u5272\u6389\u4e86\u3002\u5728\u865a\u7ee7\u627f\u4e2d\uff0c\u8fd9\u6837\u4f1a\u5bfc\u81f4\u4f60\u8fd0\u884c\u65f6\u591a\u6001\u7684virtual\u7279\u6709\u90e8\u5206\u4e5f\u6ca1\u7528\u4e86\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Window {\npublic:\n    virtual std::string name() const { return \"Window\"; }\n    virtual void display() const { std::cout &lt;&lt; \"Displaying Window\\n\"; }\n};\n\nclass WindowWithScrollBars : public Window {\npublic:\n    virtual std::string name() const override { return \"WindowWithScrollBars\"; }\n    virtual void display() const override { std::cout &lt;&lt; \"Displaying WindowWithScrollBars\\n\"; }\n};\n\nvoid printNameAndDisplay(Window w) {\n    std::cout &lt;&lt; w.name() &lt;&lt; std::endl;\n    w.display();\n}\n\nint main() {\n    WindowWithScrollBars wwsb;\n    printNameAndDisplay(wwsb); \/\/ \u8fd9\u91cc\u4f1a\u53d1\u751f\u5bf9\u8c61\u5207\u5272\n    return 0;\n}<\/code><\/pre>\n\n\n\n<p>\u89e3\u51b3\u65b9\u6cd5\u8fd8\u662f\u4e0a\u9762\u7684\u4f7f\u7528const &amp;\uff0c\u4fdd\u8bc1\u4e0d\u53d1\u751f\u5bf9\u8c61\u5207\u5272\uff0c\u53ef\u4ee5\u4f7f\u7528virtual\u7ee7\u627f\u540e\u7684\u5b9e\u9645\u5bf9\u8c61\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void printNameAndDisplay(const Window&amp; w);<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8fd9\u4e2a\u89c4\u5219\u4e0d\u9002\u7528\u4e8e\u5185\u7f6e\u7c7b\u578b\uff0cSTL\u8fed\u4ee3\u5668\u548c\u51fd\u6570\u5bf9\u8c61\u7c7b\u578b\uff0c\u5bf9\u4e8e\u4ed6\u4eec\u503c\u4f20\u9012\u662f\u53ef\u63a5\u53d7\u7684\u3002\n<ul class=\"wp-block-list\">\n<li>\u5bf9\u4e8eint,char,double\uff0c\u503c\u4f20\u9012\u5f00\u9500\u4e5f\u5c0f\uff0c\u6ca1\u5fc5\u8981\n<ul class=\"wp-block-list\">\n<li>\u6ce8\u610f\u4e0d\u5305\u62ecstring\uff0cstring\u6700\u597d\u8fd8\u662fconst &amp;\u4f20\u9012<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u5bf9\u4e8eSTL\u8fed\u4ee3\u5668\uff0c\u672c\u8d28\u5c31\u662f\u4e2a\u7c7b\uff0c\u5176\u5b9e\u73b0\u901a\u5e38\u53ea\u5305\u62ec\u51e0\u4e2a\u6307\u9488\u548c\u7d22\u5f15\u53d8\u91cf\u3002\u5c31\u7b97\u4f20\u9012\u4e5f\u6ca1\u5565\u4e8b\u3002<\/li>\n\n\n\n<li>\u5bf9\u4e8e\u51fd\u6570\u90a3\u66f4\u662f\u6ca1\u5fc5\u8981\u4e86\uff0c\u672c\u6765\u4e5f\u4e0d\u5927\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u5fc5\u987b\u8fd4\u56de\u5bf9\u8c61\u65f6\uff0c\u522b\u5984\u60f3\u8fd4\u56de\u5176\u5f15\u7528<\/h3>\n\n\n\n<p>\u6bd4\u5982\u8bf4\u5982\u4e0b\u7684\u6709\u7406\u6570\u8fde\u4e58\u573a\u666f\uff0c\u4e3a\u4e86\u8d2a\u4e00\u4e2a\u4e0d\u6790\u6784\uff0c\u4e8e\u662f\u8fd4\u56de\u4e00\u4e2a const &amp; <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const Rational&amp; operator*(const Rational&amp; lhs, const Rational&amp; rhs) {\n    \/\/ \u5728\u5806\u4e0a\u5206\u914d\u4e00\u4e2a\u65b0\u7684Rational\u5bf9\u8c61\n    Rational* result = new Rational(lhs.n * rhs.n, lhs.d * rhs.d);  \n    return *result;  \/\/ \u8fd4\u56de\u5f15\u7528\n}\n\nRational w, x, y, z;\nw = x * y * z;  \/\/ \u7b49\u540c\u4e8e operator*(operator*(x, y), z)<\/code><\/pre>\n\n\n\n<p>\u7ed3\u679c\u95ee\u9898\u53d1\u751f\u4e86\uff0c\u5982\u679c\u8fde\u4e58\u7684\u65f6\u5019\uff0c\u5c31\u4f1a\u76f4\u63a5\u9020\u6210\u5185\u5b58\u6cc4\u9732\u7684\u3002<\/p>\n\n\n\n<p>\u540c\u65f6\uff0c\u5bf9\u4e8e\u540e\u7eed\u5f00\u53d1\u8c03\u7528\u8005\u4e5f\u4e0d\u4e00\u5b9a\u4f1a\u77e5\u9053\uff0c\u8fd9\u4e2a\u5bf9\u8c61\u662f\u4ece\u5806\u4e0a\u6765\u7684\uff0c\u58f0\u660e\u5468\u671f\u7ba1\u7406\u4e5f\u5c31\u975e\u5e38\u56f0\u96be\u4e86\u3002<\/p>\n\n\n\n<p>\u56e0\u6b64\uff0c\u6211\u4eec\u9700\u8981\u8fd4\u56de\u4e00\u4e2a\u65b0\u5bf9\u8c61\uff0c\u6216\u8005\u8fd4\u56de\u4e00\u4e2a\u6307\u9488\uff0c\u6307\u5411\u8d44\u6e90\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Rational operator*(const Rational&amp; lhs, const Rational&amp; rhs) {\n    return Rational(lhs.n * rhs.n, lhs.d * rhs.d);  \/\/ \u8fd4\u56de\u503c\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u628a\u53d8\u91cf\u7533\u660e\u4e3aprivate<\/h3>\n\n\n\n<p>\u5bf9\u4e8e\u6210\u5458\u53d8\u91cf\uff0c\u5168\u90e8\u5199\u6210private\uff0c\u7136\u540e\u63d0\u4f9bget\uff0cset\u63a5\u53e3<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class AccessLevels {\npublic:\n    \/\/ \u53ea\u8bfb\u8bbf\u95ee\uff1a\u63d0\u4f9b getter\uff0c\u4e0d\u80fd\u4fee\u6539\n    int getReadOnly() const { return readOnly; }\n    \n    \/\/ \u8bfb\u5199\u8bbf\u95ee\uff1a\u63d0\u4f9b getter \u548c setter\n    void setReadWrite(int value) { readWrite = value; }\n    int getReadWrite() const { return readWrite; }\n    \n    \/\/ \u53ea\u5199\u8bbf\u95ee\uff1a\u63d0\u4f9b setter\uff0c\u6ca1\u6709 getter\n    void setWriteOnly(int value) { writeOnly = value; }\n\nprivate:\n    int noAccess;    \/\/ \u4e0d\u80fd\u8bbf\u95ee\u8fd9\u4e2a int\n    int readOnly;    \/\/ \u5bf9\u8fd9\u4e2a int \u7684\u53ea\u8bfb\u8bbf\u95ee\n    int readWrite;   \/\/ \u5bf9\u8fd9\u4e2a int \u7684\u8bfb\u5199\u8bbf\u95ee\n    int writeOnly;   \/\/ \u5bf9\u8fd9\u4e2a int \u7684\u53ea\u5199\u8bbf\u95ee\n};<\/code><\/pre>\n\n\n\n<p>\u8fd9\u6837\u5bf9\u4e8e\u53d8\u91cf\u53ef\u4ee5\u7cbe\u786e\u7684\u63a7\u5236\u3002\u540c\u65f6\u63d0\u9ad8\u4e86\u5c01\u88c5\u6027\uff0c\u5bf9\u4e8e\u4f7f\u7528\u8005\u4e0d\u4f1a\u5bdf\u89c9\u5230\u5185\u90e8\u53d8\u91cf\uff0c\u540c\u65f6\u53ef\u4ee5\u66ff\u6362\u51fd\u6570\u5185\u90e8\u7684\u5b9e\u9645\u5b9e\u73b0\uff0c\u63d0\u4f9b\u4e86\u5f88\u5927\u7684\u7075\u6d3b\u6027\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class SpeedDatacollection\npublic:\n    void addValue(int speed);\/\/ \u6dfb\u52a0\u4e00\u4e2a\u901f\u5ea6\u503cdoubleaverageSoFar()const;\/\/\u8fd4\u56de\u5e73\u5747\u901f\u5ea6\n})<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u5b81\u4ee5\u975e\u6210\u5458\u3001\u975e\u53cb\u5143\u51fd\u6570\u66ff\u6362\u6210\u5458\u51fd\u6570<\/h3>\n\n\n\n<p>\u5177\u4f53\u6765\u8bf4\u662f\u4e0b\u9762\u8fd9\u4e2a\u4f8b\u5b50\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class WebBrowser {\npublic:\n    \/\/ \u6210\u5458\u51fd\u6570\uff0c\u7528\u4e8e\u6e05\u9664\u4e0d\u540c\u7c7b\u578b\u7684\u6570\u636e\n    void clearCache();\n    void clearHistory();\n    void removeCookies();\n    \n    \/\/ \u6210\u5458\u51fd\u6570\uff1a\u6e05\u9664\u6240\u6709\u6570\u636e\uff0c\u8c03\u7528\u5176\u4ed6\u6210\u5458\u51fd\u6570\n    void clearEverything() {\n        clearCache();\n        clearHistory();\n        removeCookies();\n    }\n};\n\n\/\/ \u975e\u6210\u5458\u51fd\u6570\uff1a\u63d0\u4f9b\u7c7b\u4f3c clearEverything \u7684\u529f\u80fd\nvoid clearBrowser(WebBrowser&amp; wb) {\n    wb.clearCache();\n    wb.clearHistory();\n    wb.removeCookies();\n}<\/code><\/pre>\n\n\n\n<p>\u8fd9\u6761\u7ed9\u51fa\u7684\u5efa\u8bae\u662f\u662f\u5c3d\u91cf\u4f7f\u7528\u975e\u6210\u5458\u51fd\u6570\uff0c\u5373\u5916\u9762\u7684\u90e8\u5206\u3002<\/p>\n\n\n\n<p>\u8fd9\u91cc\u6211\u5f88\u4e0d\u7406\u89e3\uff0cc++\u4e0d\u662f\u9762\u5411\u5bf9\u8c61\u5417\uff1f\u4e3a\u4ec0\u4e48\u8fd9\u653e\u5728\u5916\u9762\u8fd8\u66f4\u597d\uff1f\u4e0d\u662f\u7834\u574f\u5c01\u88c5\u6027\uff1f<\/p>\n\n\n\n<p>\u4e66\u4e2d\u9a73\u65a5\u4e86\u6211\u8fd9\u4e2a\u60f3\u6cd5\uff0c\u660e\u786e\u8868\u9762\u662f\u5185\u90e8\u6210\u5458\u51fd\u6570clearEverything\u7684\u5c01\u88c5\u6027\u66f4\u4f4e\u3002<\/p>\n\n\n\n<p>\u5bf9\u4e8e\u4e00\u4e2aprivate\u5bf9\u8c61\uff0c\u597d\u7684\u5c01\u88c5\u6027\u662f\u6307\u8d8a\u5c11\u7684\u51fd\u6570\u53ef\u4ee5\u770b\u89c1\uff0c\u53ef\u4ee5\u5c01\u88c5\uff0c\u8d8a\u597d\u3002\u5982\u679c\u6bcf\u4e2a\u51fd\u6570\u90fd\u53ef\u4ee5\u8bbf\u95eeprivate\uff0c\u90a3private\u5c06\u6beb\u65e0\u610f\u4e49\u3002\u5bf9\u4e8e\u6211\u4eec\u540e\u7eed\u4fee\u6539\uff0c\u5c31\u4e0d\u4f1a\u5f71\u54cd\u5916\u90e8\u3002\u5bf9\u4e8e\u8bbe\u8ba1\u6765\u8bf4\uff0c\u964d\u4f4e\u4e86\u7c7b\u7684\u8d23\u4efb\uff0c\u4f7f\u5176\u4e13\u6ce8\u4e8e\u5176\u672c\u8eab\uff0c\u662f\u4e00\u4e2a\u66f4\u597d\u7684\u8bbe\u8ba1\u3002<\/p>\n\n\n\n<p>friend\u4e5f\u662f\u4e00\u4e2a\u6253\u7834\u5c01\u88c5\u7684\u8bbe\u8ba1\uff0c\u7834\u574f\u529b\u5f88\u660e\u663e\u3002<\/p>\n\n\n\n<p>\u5728unity\u8fd9\u79cdc#\u4e2d\uff0c\u53ef\u80fd\u505a\u6cd5\u662f\u5b9e\u73b0\u4e00\u4e2astatic\u7684\u5de5\u5177\u7c7b\uff0c\u7136\u540e\u8bbf\u95ee\u3002\u5728c++\u6bd4\u8f83\u597d\u7684\u505a\u6cd5\u662f\u7528namespace\uff0c\u4fdd\u8bc1\u51fd\u6570\u548c\u7c7b\u5728\u540c\u4e00\u547d\u540d\u7a7a\u95f4\uff0c\u53ef\u4ee5\u6b63\u786e\u4f7f\u7528\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>namespace WebBrowserStuff {\n    class WebBrower { ... };\n    void clearBrower (WebBrowser &amp;wb);\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u82e5\u6240\u6709\u53c2\u6570\u90fd\u9700\u8981\u7c7b\u578b\u8f6c\u5316\uff0c\u8bf7\u4e3a\u6b64\u91c7\u7528\u975e\u6210\u5458\u51fd\u6570<\/h3>\n\n\n\n<p>\u8003\u8651\u4ee5\u4e0b\u7c7b<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Rational {\npublic:\n    \/\/ \u6784\u9020\u51fd\u6570\uff0c\u5141\u8bb8\u9690\u5f0f\u8f6c\u6362\n    Rational(int numerator = 0, int denominator = 1);\n\n    \/\/ \u83b7\u53d6\u5206\u5b50\u548c\u5206\u6bcd\u7684\u6210\u5458\u51fd\u6570\n    int numerator() const;\n    int denominator() const;\n\n    \/\/ \u5c06 operator* \u5b9a\u4e49\u4e3a\u6210\u5458\u51fd\u6570\n    const Rational operator*(const Rational&amp; rhs) const;\n\nprivate:\n    int n, d; \/\/ \u5206\u5b50\u548c\u5206\u6bcd\n};\n\n\/\/ \u793a\u4f8b Rational \u5bf9\u8c61\nRational oneEighth(1, 8);\nRational oneHalf(1, 2);\nRational r1(1, 2), r2(3, 4);\nRational result = r1 * r2; \/\/ \u5408\u6cd5\uff0c\u6210\u5458\u51fd\u6570\u53ef\u4ee5\u5904\u7406\u3002\nRational r(1, 2);\nRational result = r * 3; \/\/ \u5408\u6cd5\uff0c\u6ca1\u6709\u95ee\u9898\u3002r1.operator*(r2)\nRational result = 3 * r; \/\/ \u7f16\u8bd1\u9519\u8bef\uff0c\u5de6\u64cd\u4f5c\u6570\u4e0d\u662f Rational\u3002<\/code><\/pre>\n\n\n\n<p>\u8fd9\u6837\u4f1a\u6709\u95ee\u9898\uff0c\u56e0\u4e3a\u7b2c\u4e00\u4e2a\uff0c\u9690\u5f0f\u8c03\u7528\u4e86r1.operator*(r2)\uff0c\u800c\u7b2c\u4e8c\u4e2a\u6ca1\u6709\u8f6c\u5316\u81ea\u7136\u505a\u4e0d\u5230\uff0c\u89e3\u51b3\u65b9\u6cd5\u662f\u653e\u5728\u975e\u6210\u5458\u51fd\u6570<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const Rational operator*(const Rational&amp; lhs, const Rational&amp; rhs);<\/code><\/pre>\n\n\n\n<p>\u8fd9\u6837\u5bf9\u4e8e\u4ee5\u4e0a\u5168\u90e8\u60c5\u51b5\u90fd\u53ef\u4ee5\u5904\u7406\u4e86\u3002<\/p>\n\n\n\n<p>\u4f46\u662f\u6211\u4e2a\u4eba\u53c8\u6709\u4e86\u7591\u60d1\uff0c\u90a3\u8fd9\u6837\u8f6c\u5316\uff0c\u5bf9\u4e8e 2 * 2\u7684\u8fd4\u56de\u503c\u7c7b\u578b\u4e0d\u662f\u65e0\u6cd5\u786e\u5b9a\uff1f\u5373\u65e2\u53ef\u4ee5\u662frational\uff0c\u4e5f\u53ef\u4ee5\u662fint\uff0c\u5b8c\u5168\u4e0d\u5408\u7406\u554a\uff08\uff1f\uff09<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/www.haruhi.fans\/wp-content\/uploads\/2025\/05\/image-28.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"241\" height=\"104\" data-original=\"https:\/\/www.haruhi.fans\/wp-content\/uploads\/2025\/05\/image-28.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-3968\" style=\"width:240px;height:auto\"\/><\/div><\/figure>\n\n\n\n<p>\u9690\u5f0f\u8f6c\u5316\u611f\u89c9\u5c31\u662f\u5927\u5751\uff0c\u4ee5\u540e\u771f\u8981\u7ed9\u4ed6\u5168\u90e8explicit\u6389\uff0c\u89e3\u51b3\u65b9\u6cd5\u5c31\u662frational\u65f6\u5019\u5f3a\u5236\u4e0d\u51c6\u9690\u5f0f\u8f6c\u5316\u4e86\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>explicit Rational(int numerator = 0, int denominator = 1);<\/code><\/pre>\n\n\n\n<p>\u5408\u7406\u591a\u4e86<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/www.haruhi.fans\/wp-content\/uploads\/2025\/05\/image-29.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"251\" height=\"105\" data-original=\"https:\/\/www.haruhi.fans\/wp-content\/uploads\/2025\/05\/image-29.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-3969\"\/><\/div><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">\u8003\u8651\u5199\u51fa\u4e00\u4e2a\u4e0d\u629b\u51fa\u5f02\u5e38\u7684swap\u51fd\u6570<\/h3>\n\n\n\n<p>C++11\u65f6\u5019\u5df2\u7ecf\u89e3\u51b3\u4e86\u3002\u5728C++11\u65f6\u5019\u4f7f\u7528\u4e86std::move\uff0c\u5e76\u660e\u786e\u7533\u660e\u4e3anoexcept\uff08\u4e0d\u629b\u51fa\u5f02\u5e38\uff09\u3002<\/p>\n\n\n\n<p>\u90a3\u95ee\u9898\u662f\u4ec0\u4e48\u5462\uff1f\u4ee5\u524d\u7684\u5178\u578b\u5b9e\u73b0\u662f\u8fd9\u6837\u7684\u3002\u6b64\u65f6clion\u76f4\u63a5\u62a5warning\u4e86\uff0c\u8868\u793a\u662f\u6ca1\u6709\u9075\u5b88noexpect\u89c4\u8303\u3002<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">template&lt;typename T&gt;<br>void swap(T&amp; a , T&amp;b) {<br>    T temp(a);<br>    a = b;<br>    b = temp;<br>}<\/pre>\n\n\n\n<p>\u8fd9\u6d89\u53ca\u5230\u4e09\u4e2a\u590d\u5236\u3002\u590d\u5236\u662f\u4e0d\u5fc5\u8981\u7684\uff0c\u4f1a\u964d\u4f4e\u6548\u7387\u3002\u8fd9\u79cd\u8bbe\u8ba1\u65b9\u6cd5\u7684\u5e38\u89c1\u8868\u793a\u662f\u201cpipl\u201d\uff08pointer to implementation\uff09\u540c\u65f6\uff0c\u5bf9\u4e8eT\u7c7b\u578b\u7684\u590d\u5236\u5f88\u53ef\u80fd\u4f1a\u6709\u629b\u51fa\u5f02\u5e38\u3002<\/p>\n\n\n\n<p>\u5bf9\u4e8e\u4ea4\u6362\uff0c\u5047\u8bbe\u6211\u4eec\u5199\u8fd9\u6837\u4e00\u4e2aswap\uff0c\u4ed6\u4f1a\u6709\u4e24\u4e2a\u95ee\u9898\u3002\u4e00\u662f\u4f60\u4e0d\u80fd\u591f\u8bbf\u95ee\u7c7b\u5185\u7684\u6307\u9488\uff0c\u56e0\u4e3a\u4e00\u822c\u90fd\u4e3aprivate\u5bf9\u8c61\uff0c\u4e8c\u662f\u4e5f\u4e0d\u652f\u6301\u504f\u7279\u5316<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>template&lt;&gt;\nvoid swap&lt;Widget&gt; (Widget &amp;a ,Widget &amp;b) \/\/\u5b9e\u9645\u6ca1\u6709\u504f\u7279\u5316\u51fd\u6570\n{\n    swap(a.plmpl,b,plmpl);\n}<\/code><\/pre>\n\n\n\n<p>\u4e0b\u9762\u5f15\u5165\u4e24\u4e2a\u6982\u5ff5\uff0c<strong>\u504f\u7279\u5316\uff08Partial Specialization\uff09<\/strong>\u548c<strong>\u663e\u5f0f\u7279\u5316\uff08Explicit Specialization\uff09<\/strong>\uff1a<\/p>\n\n\n\n<p>\u504f\u7279\u5316\u6307\u7684\u662f\u4e3a\u6a21\u677f\u5b9a\u4e49\u4e00\u4e2a\u7a0d\u5fae\u5177\u4f53\u4e00\u4e9b\u4f46\u4e0d\u662f\u5b8c\u5168\u5177\u4f53\u7684\u5b9e\u73b0\uff0c\u5177\u4f53\u6765\u8bf4\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>template&lt;typename T&gt;\nclass MyClass { \/* \u4e00\u822c\u5b9e\u73b0 *\/ };\n\ntemplate&lt;typename T&gt;\nclass MyClass&lt;T*&gt; { \/* T \u4e3a\u6307\u9488\u7c7b\u578b\u7684\u504f\u7279\u5316\u5b9e\u73b0 *\/ };\n\ntemplate&lt;typename T&gt;\nclass MyClass&lt;Widget&lt;T&gt;&gt; { \/* T \u4e3aWidget\u7684\u504f\u7279\u5316\u5b9e\u73b0 *\/ };\n\n\/\/ \u504f\u7279\u5316\uff08\u975e\u6cd5\uff09\ntemplate &lt;typename T&gt;\nvoid func&lt;T, int&gt;(T t, int u) {  \/\/ \u8fd9\u662f\u975e\u6cd5\u7684\uff0c\u51fd\u6570\u6a21\u677f\u4e0d\u80fd\u504f\u7279\u5316\n\ntemplate&lt;typename T&gt;\nvoid func&lt;T&gt; (T t);             \/\/ \u8fd9\u662f\u975e\u6cd5\u7684\uff0c\u51fd\u6570\u6a21\u677f\u4e0d\u80fd\u504f\u7279\u5316<\/code><\/pre>\n\n\n\n<p>\u663e\u793a\u7279\u5316\u662f\u6307\u4e3a\u6a21\u677f\u5b9a\u4e49\u4e00\u4e2a\u5b8c\u5168\u5177\u4f53\u7684\u7248\u672c\uff0c\u5c31\u662f\u5199\u4e00\u4e2a\u5177\u4f53\u7684\u5b9e\u73b0\u7c7b\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>template&lt;&gt;\nvoid swap&lt;Widget&lt;int&gt;&gt;(Widget&lt;int&gt;&amp; a, Widget&lt;int&gt;&amp; b);<\/code><\/pre>\n\n\n\n<p>\u90a3\u95ee\u9898\u662f\u4ec0\u4e48\u5462\uff1fC++\u4e2d\uff0c\u5bf9\u4e8e\u51fd\u6570\u4e0d\u53ef\u4ee5\u504f\u7279\u5316\uff0c\u53ef\u4ee5\u663e\u793a\u504f\u5316\u3002\u6a21\u677f\u5219\u4e8c\u8005\u7686\u53ef\u3002<\/p>\n\n\n\n<p>\u6240\u4ee5\u4e3a\u4ec0\u4e48\u4e0d\u652f\u6301\u5462\uff1f\uff1f\uff1f\u7f51\u7edc\u4e0a\u641c\u7d22\u4e86\u4e00\u4e0b\uff0c\u7b80\u800c\u8a00\u4e4b\u4e00\u6bb5\u8bdd\uff1a\u6a21\u677f\u7279\u5316\u7248\u672c\u4e0d\u53c2\u4e0e\u51fd\u6570\u7684\u91cd\u8f7d\u6289\u7b56\u8fc7\u7a0b\uff0c\u56e0\u6b64\u5728\u548c\u51fd\u6570\u91cd\u8f7d\u4e00\u8d77\u4f7f\u7528\u7684\u65f6\u5019\uff0c\u53ef\u80fd\u51fa\u73b0\u4e0d\u7b26\u5408\u9884\u671f\u7684\u7ed3\u679c\u3002<\/p>\n\n\n\n<p>\u4e3e\u4e2a\u5177\u4f53\u7684\u4f8b\u5b50\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>template&lt;typename T&gt;\nvoid func&lt;T&gt; (T t);\n\nvoid func&lt;int&gt; (int t);<\/code><\/pre>\n\n\n\n<p>\u6b64\u65f6\uff0c\u5bf9\u4e8eC++\uff0c\u4f60\u5c31\u4e0d\u6e05\u695a\u5e94\u8be5\u5177\u4f53\u8c03\u7528\u54ea\u4e00\u4e2a\u51fd\u6570\u4e86\u3002\u4e0d\u540c\u4e8e\u7c7b\u578b\u63a8\u5bfc\u90a3\u79cd\u6709\u660e\u786e\u7684\u89c4\u5219\uff0c\u8fd9\u91cc\u7684\u6a21\u677f\u7279\u5316\u7248\u672c\u4e0d\u53c2\u4e0e\u51fd\u6570\u7684\u91cd\u8f7d\u6289\u7b56\u8fc7\u7a0b\uff0c\u53ef\u80fd\u5c31\u4f1a\u5bfc\u81f4\u95ee\u9898\u3002<\/p>\n\n\n\n<p>\u56de\u5f52\u6b63\u9898\uff0c\u4e3a\u4e86\u89e3\u51b3\uff0c\u6211\u4eec\u628a\u5b83\u653e\u5728\u51fd\u6570\u5185\u90e8\u89e3\u51b3\u5373\u53ef\uff0c\u5373\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Widget{\npublic:\n    void swap(Widget &amp;other) \/\/\u5b9e\u9645\u6ca1\u6709\u504f\u7279\u5316\u51fd\u6570\n    {\n        swap(plmpl,other.plmpl);\n    }\n}<\/code><\/pre>\n\n\n\n<p>\u5bf9\u4e8e\u5916\u90e8\uff0c\u518d\u5199\u4e00\u4e2aswap\u8c03\u7528\u8fd9\u4e2a\u51fd\u6570\uff0c\u4e14\u4e0d\u7528\u504f\u7279\u5316\u7248\u672c\u5373\u53ef\u3002\u8fd9\u6837\u6682\u65f6\u884c\u5f97\u901a\u4e86\u3002\u4f46\u8fd8\u662f\u6709\u95ee\u9898\uff0c\u5373\u8fd9\u4e2a\u548cstd\u4e0b\u5df2\u7ecf\u6709swap\u4e86\uff0c\u91cd\u8f7d\u53ef\u80fd\u5c31\u4f1a\u6709\u95ee\u9898\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>namespace std {\n    template &lt;typename T&gt;\n    void swap(Widget&lt;T&gt;&amp; a, Widget&lt;T&gt;&amp; b) {\n        a.swap(b);\n    }\n}<\/code><\/pre>\n\n\n\n<p>\u6700\u597d\u89e3\u51b3\u65b9\u6cd5\u5c31\u662f\u6362\u4e2a\u7a7a\u95f4<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>namespace WidgetStuff {\n    class Widget{ ... }\n    template &lt;typename T&gt; \/\/ \u975e\u6210\u8bed\u51fd\u6570swap\uff0c\u4e0d\u662fstd\u4e00\u90e8\u5206\n    void swap(Widget&lt;T&gt;&amp; a, Widget&lt;T&gt;&amp; b) {\n        a.swap(b);\n    }\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u5b9e\u73b0<\/h2>\n\n\n\n<p>\u9664\u4e86\u7c7b\u7684\u5b9a\u4e49\uff0c\u51fd\u6570\u7684\u58f0\u660e\uff0c\u8fd8\u6709\u4e00\u4e9b\u9700\u8981\u6ce8\u610f\u7684\u4e1c\u897f\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u5c3d\u53ef\u80fd\u5ef6\u540e\u53d8\u91cf\u5b9a\u4e49\u51fa\u73b0\u7684\u65f6\u95f4<\/h3>\n\n\n\n<p>\u5bf9\u4e8e\u672a\u4f7f\u7528\u7684\u53d8\u91cf\u662f\u6709\u5f00\u9500\u7684\uff0c\u56e0\u6b64\u5e94\u8be5\u5c3d\u53ef\u80fd\u53bb\u907f\u514d\u8fd9\u65b9\u9762\u3002<\/p>\n\n\n\n<p>\u5f00\u59cb\u8fd8\u662f\u6709\u4e9b\u7591\u60d1\uff0c\u591a\u665a\u7b97\u6bd4\u8f83\u5408\u9002\uff08\uff1f\uff09\u5f88\u591a\u60c5\u51b5\u4e0b\uff0c\u4e3a\u4e86\u4ee3\u7801\u7f8e\u89c2\u5408\u9002\uff0c\u653e\u5728\u51fd\u6570\u5f00\u5934\u7edf\u4e00\u5b9a\u4e49\u6bd4\u8f83\u65b9\u4fbf\u4ee5\u53ca\u4fbf\u4e8e\u540e\u4eba\u9605\u8bfb\uff0c\u4e3a\u4ec0\u4e48\u4e0d\u597d\u5462\uff1f<\/p>\n\n\n\n<p>\u4e0b\u9762\u4e3e\u4e86\u4e00\u4e2a\u4f8b\u5b50\uff0c\u6bd4\u5982\u8fd9\u4e2a\u52a0\u5bc6\u5bc6\u7801<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sstd::string encryptPassword(const std::string &amp; passowrd) {\n    using namespace std;\n    string encrypted(passowrd); \/\/ \u751f\u6210\u52a0\u5bc6\u5b57\u7b26\n    if(passowrd.length() &lt; 10) { \/\/ \u5982\u679c\u8fd9\u91cc\u629b\u51fa\u5f02\u5e38\uff0c\u5219\u524d\u9762\u7684\u521d\u59cb\u5316\u5c06\u65e0\u610f\u4e49\u3002\n        throw logic_error(\"Password is too short\");\n    }\n    encrypt(encrypted);      \/\/ \u52a0\u5bc6\n    return encrypted;\n}<\/code><\/pre>\n\n\n\n<p>\u5982\u679c\u53d1\u751f\u5f02\u5e38\uff0c\u8fd9\u91cc\u7684encrypted\u5c31\u767d\u767d\u5b9a\u4e49\u4e86\uff0c\u56e0\u6b64\u6211\u4eec\u9700\u8981\u5ef6\u8fdf\u5b9a\u4e49\uff0c\u5728\u771f\u6b63\u9700\u8981\u7528\u7684\u65f6\u5019\u624d\u5b9a\u4e49\u3002\u8fd9\u6837\u4ee3\u7801\u6bd4\u8f83\u5bb9\u6613\u8bfb\u5f88\u6e05\u6670\u3002 <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>std::string encryptPassword(const std::string &amp; passowrd) {\n    using namespace std;\n    if(passowrd.length() &lt; 10) { \/\/ \u5982\u679c\u8fd9\u91cc\u629b\u51fa\u5f02\u5e38\uff0c\u5219\u524d\u9762\u7684\u521d\u59cb\u5316\u548c\u52a0\u5bc6\u5c06\u65e0\u610f\u4e49\u3002\n        throw logic_error(\"Password is too short\");\n    }\n    string encrypted(passowrd); \/\/ \u751f\u6210\u52a0\u5bc6\u5b57\u7b26\n    encrypt(encrypted);      \/\/ \u52a0\u5bc6\n    return encrypted;\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u5c3d\u91cf\u5c11\u505a\u5f3a\u5236\u8f6c\u6362<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">\u8f6c\u5316\u65b9\u5f0f<\/h4>\n\n\n\n<p>C++\u5f3a\u5236\u8f6c\u6362\u6709\u4e09\u79cd\u65b9\u5f0f\uff0c\u5206\u522b\u5982\u4e0b\uff1a<\/p>\n\n\n\n<p>(T) expression; \/\/ C\u98ce\u683c\u5f3a\u5236\u8f6c\u6362\uff0c\u8868\u8fbe\u5f0f\u8f6c\u5316\u4e3aT\u7c7b\u578b<br>T(expresssion); \/\/ \u51fd\u6570\u5f0f\u5f3a\u5236\u8f6c\u6362\uff0c\u8868\u8fbe\u5f0f\u8f6c\u5316\u4e3aT\u7c7b\u578b<\/p>\n\n\n\n<p>\u4e0a\u9762\u4e24\u79cd\u4e3a\u65e7\u5f0f\u5f3a\u5236\u8f6c\u6362\uff0c\u5728\u610f\u4e49\u4e0a\u6ca1\u6709\u533a\u522b\uff0c\u53ea\u662f\u62ec\u53f7\u7684\u4f4d\u7f6e\u4e0d\u540c\u3002\u7edf\u4e00\u79f0\u4e4b\u4e3a\u65e7\u5f0f\u5f3a\u5236\u8f6c\u6362\uff1b\u4e00\u822c\u5728C++\u4e2d\u4e0d\u5efa\u8bae\u4e0a\u9762\u65b9\u5f0f\uff0c\u5efa\u8bae\u4f7f\u7528C++\u98ce\u683c\u7684\u3002\u6700\u540e\u4e00\u79cd\u4e3aC++\u76844\u4e2a\u5f3a\u5236\u8f6c\u5316\u7c7b\u578b<\/p>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<p><strong>static_cast&lt;T&gt; (expression)<\/strong><\/p>\n\n\n\n<p>\u6700\u5e38\u7528\u5b89\u5168\u7684\u8f6c\u6362\uff0c\u4e0a\u884c\u8f6c\u6362\u5b89\u5168\uff08\u5b50\u7c7b\u8f6c\u6210\u57fa\u7c7b\uff0c\u57fa\u7c7b\u91cc\u9762\u4e00\u5b9a\u6709\uff09\uff0c\u4e0b\u884c<strong>\u4e0d\u5b89\u5168<\/strong>\uff08 \u4e0d\u4f1a\u68c0\u67e5\uff09\uff0c\u56e0\u4e3a\u53ef\u80fd\u6709\u6ca1\u6709\u5b9e\u73b0\u7684\u90e8\u5206\u3002<br>\u5206\u4e3a\u5355\u53cc\u5411\u90e8\u5206\uff1a<br>\u5355\u5411\uff1a\u975econst\u8f6c\u5316\u4e3aconst\uff0cint\u8f6c\u5316\u4e3adouble<br>\u53cc\u5411\uff1a\u6307\u5411\u7c7b\u578b\u5316\u6307\u9488\u548cvoid*\u6307\u9488\uff0c\u57fa\u7c7b\u7684\u6307\u9488\u548c\u6d3e\u751f\u7c7b\u6307\u9488\u7b49\u7b49\u3002<\/p>\n\n\n\n<p><strong>dynamic_cast&lt;T&gt; (expression)<\/strong><\/p>\n\n\n\n<p>\u7528\u4e8e<strong>\u5b89\u5168\u7684\u5411\u4e0b\u8f6c\u6362<\/strong>\u3002\u4e13\u95e8\u7528\u5728\u865a\u51fd\u6570\u7236\u5b50\u7c7b\u4e4b\u95f4\u8f6c\u5316\uff08\u5fc5\u987b\u6709\u865a\u51fd\u6570\uff09\uff0c<strong>\u4f1a\u68c0\u67e5<\/strong>\u5b9e\u9645\u7684\u6307\u5411\u3002\u5982\u679c\u4e0d\u662f\u76ee\u6807\u7c7b\u578b\u5c31\u8fd4\u56de\u7a7a\u6307\u9488\u3002\u56e0\u4e3a\u8981\u8fd0\u884c\u65f6\u68c0\u67e5\uff0c\u6240\u4ee5<strong>\u5f00\u9500\u6bd4\u8f83\u5927<\/strong>\u3002<\/p>\n\n\n\n<p><strong>const_cast&lt;T&gt; (expression)<\/strong><\/p>\n\n\n\n<p>\u53bb\u9664const\u5c5e\u6027<\/p>\n\n\n\n<p><strong>reinterpret_cast&lt;T&gt; (expression)<\/strong><\/p>\n\n\n\n<p>\u4ece\u5e95\u5c42\u91cd\u65b0\u89e3\u91ca\uff0c\u544a\u8bc9\u5185\u5b58\u8fd9\u5757\u4e8c\u8fdb\u5236\u4f60\u5c31\u8fd9\u4e48\u89e3\u91ca\u3002\u4e14\u5177\u4f53\u7684\u7ed3\u679c\u4f9d\u8d56\u4e8e\u5177\u4f53\u7684\u73af\u5883\uff0c\u4e0d\u53ef\u79fb\u690d\u3002\u9ad8\u5371\uff0c\u522b\u7528<\/p>\n<\/div><\/div>\n\n\n\n<p>\u4f46\u662f\u4e5f\u4e0d\u4e00\u5b9a\u5c31\u975e\u8981\u5168\u90e8\u5f3a\u5236\u8f6c\u6362\uff0c\u6709\u65f6\u5019\u6765\u8bf4\u9690\u5f0f\u8f6c\u5316\u4e5f\u662f\u5408\u7406\u7684\uff0c\u6bd4\u5982\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Widget { explicit Widget(int size); }\nvoid doSomeWork(Widget(15));            \/\/ \u51fd\u6570\u98ce\u683c\u8f6c\u6362\uff0c\u4eceint\u521b\u5efaWidget\ndoSomeWork(static_cast&lt;Widget&gt;(15));    \/\/ C ++ \u98ce\u683c\uff0c\u4eceint\u521b\u5efaWidget<\/code><\/pre>\n\n\n\n<p>\u8fd9\u91cc\u53ef\u4ee5\u770b\u6210\u662f\u752815\u8fd9\u4e2aint\u5f3a\u5236\u8f6c\u5316\u4e3aWidget\u7c7b\u578b\uff0c\u4f46\u662f\u660e\u663e\u7b80\u6d01\u5f88\u591a\uff0c\u4e5f\u662f\u5408\u7406\u7684\u3002<\/p>\n\n\n\n<p>\u540c\u65f6\uff0c\u4e5f\u53ef\u4ee5\u770b\u5230\uff0c<strong>\u8f6c\u5316\u5e76\u662f\u4e0d\u8ba9\u7f16\u8bd1\u5668\u628a\u4e00\u4e2a\u7c7b\u578b\u770b\u6210\u53e6\u4e00\u4e2a\u7c7b\u578b\u90a3\u4e48\u7b80\u5355\uff0c\u800c\u662f\u9700\u8981\u4e00\u4e2a\u6784\u9020\u8fc7\u7a0b<\/strong><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u6307\u9488\u8f6c\u5316<\/h4>\n\n\n\n<p>\u53ef\u4ee5\u628aDerived*\u6307\u9488\u9690\u5f0f\u8f6c\u4e3a\u8d4b\u503c\u7ed9Base*\u6307\u9488\u3002\u7f16\u8bd1\u5668\u4f1a\u8ba1\u7b97\u6b63\u786e\u7684\u504f\u79fb\u91cf\u548c\u5730\u5740\u5e03\u5c40\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Base { ... };\nclass Derived : public Base { ... };\nDerived d;\nBase* pb = &amp;d; \/\/ \u8f6c\u6362\uff1aDerived* \u2192 Base*<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">\u4e0d\u8981\u5c06*this\u770b\u4f5c\u662f\u57fa\u7c7b\u90e8\u5206\u7684\u5bf9\u8c61<\/h4>\n\n\n\n<p>\u5177\u4f53\u6765\u8bf4\uff0c\u901a\u8fc7static_cast&lt;&gt;(*this)\u8f6c\u5316\u7684\u526f\u672c\u662f\u4e34\u65f6\u7684\uff0c\u548c\u539f\u59cb\u5bf9\u8c61\u6ca1\u6709\u5173\u8054\u3002\u5982\u679c\u6b64\u65f6\u505a\u4e00\u4e9b\u53d8\u91cf\u7684\u4fee\u6539\uff0c\u5bf9\u5f53\u524d\u5b50\u7c7b\u662f\u6ca1\u6709\u53d8\u5316\u7684\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Window {  \/\/ \u57fa\u7c7b\npublic:\n    virtual void onResize() { ... }  \/\/ onResize \u7684\u57fa\u7c7b\u5b9e\u73b0\n    ...\n};\n\nclass SpecialWindow : public Window {  \/\/ \u6d3e\u751f\u7c7b\npublic:\n    virtual void onResize() {          \/\/ onResize \u7684\u6d3e\u751f\u7c7b\u5b9e\u73b0\n        static_cast&lt;Window&gt;(*this).onResize();  \/\/ \u5c06 *this \u8f6c\u6362\u4e3a Window \u7c7b\u578b\uff0c\u5e76\u8c03\u7528\u57fa\u7c7b\u7684 onResize\n        ...\n    }\n};<\/code><\/pre>\n\n\n\n<p>\u81f3\u4e8e\u4e3a\u4ec0\u4e48\u8fd9\u4e48\u8bbe\u8ba1\uff0c\u7a0d\u5fae\u60f3\u4e86\u4e00\u4e0b\u4e5f\u89c9\u5f97\u5408\u7406\u4e86\u3002\u6309\u7167\u4e0a\u9762\u63d0\u5230\u7684\uff0c\u5f3a\u5236\u8f6c\u5316\u662f\u9700\u8981\u8f6c\u5316\u8fc7\u7a0b\u7684\uff0c\u5982\u679c\u6b64\u65f6\u5f3a\u5236\u8f6c\u5316\u4fee\u6539\u5c31\u4f1a\u6709\u4e0d\u5408\u7406\u7684\u5730\u65b9\u3002\u5982\u679c\u9700\u8981\u4fee\u6539\u7684\u8bdd\uff0c\u663e\u793a\u7684\u8c03\u7528\u5373\u53ef\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class SpecialWindow : public Window {\npublic:\n    virtual void onResize() {\n        Window::onResize();  \/\/ \u76f4\u63a5\u8c03\u7528\u57fa\u7c7b\u7684 onResize \u65b9\u6cd5\n        ...\n    }\n};<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">\u907f\u514ddynamic_cast\u8c03\u7528<\/h4>\n\n\n\n<p>\u8fd9\u90e8\u5206\u4e3b\u8981\u662f\u8bf4\uff0c\u4ece\u8bbe\u8ba1\u4e0a\u5c31\u907f\u514ddynamic_cast\u7684\u4f7f\u7528\uff0c\u7528virtual\u4e4b\u7c7b\u7684\u66f4\u597d\u4e00\u4e9b\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cLass Window{ ... }\nclass specialWindow :public Window{\npublic:\n    void blink();\/\/ \u5047\u8bbe\u53ea\u6709specialwindow\u624d\u6709\u8fd9\u4e2a\u529f\u80fd\n};\ntypedef std::vector&lt;std::shared_ptr&lt;Window&gt;&gt; VPW;\nVPW winPtrs;\n\nfor (VPW::iterator iter = winPtrs.begin(); iter != winPtrs.end(); ++iter) {\n    if (SpecialWindow* psw = dynamic_cast&lt;SpecialWindow*&gt;(iter-&gt;get())) {\n        psw-&gt;blink();\n    }\n}<\/code><\/pre>\n\n\n\n<p>\u5bf9\u4e8e\u8fd9\u4e2a\uff0c\u56e0\u4e3a\u6211\u60f3\u8981\u7528\u5b50\u7c7b\u7684blink\u529f\u80fd\u00b7\uff0c\u90a3\u6211\u5c31\u5fc5\u987b\u8981\u5b89\u5168\u8f6c\u5316\u4e3a\u5b50\u7c7b\u5bf9\u8c61\uff0c\u4ece\u800c\u9700\u8981\u4f7f\u7528dynamic_cast\u529f\u80fd\u3002\u8fd9\u6837\u5728\u8fd0\u884c\u65f6\u5019\u4f1a\u9020\u6210\u5f88\u5927\u7684\u5f00\u9500\uff0c\u6b63\u786e\u7684\u6bd4\u8f83\u597d\u7684\u8bbe\u8ba1\u5e94\u8be5\u5982\u4e0b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Window {\npublic:\n    virtual void blink() {} \/\/ \u4ec0\u4e48\u4e5f\u4e0d\u505a\n};\nclass SpecialWindow : public Window {\npublic:\n    virtual void blink() { \/* \u6267\u884c\u6709\u610f\u4e49\u7684\u4efb\u52a1 *\/ }\n};\ntypedef std::vector&lt;std::shared_ptr&lt;Window&gt;&gt; VPW;\nVPW winPtrs; \/\/ \u652f\u6301\u5b58\u50a8Window\u7c7b\u578b\u7684\u5bb9\u5668\nfor (VPW::iterator iter = winPtrs.begin(); iter != winPtrs.end(); ++iter) {\n    (*iter)-&gt;blink(); \/\/ \u6ce8\u610f\uff1a\u65e0\u9700 dynamic_cast\n}<\/code><\/pre>\n\n\n\n<p>\u8fd9\u6837\u907f\u514d\u4e86\u5411\u4e0b\u8f6c\u5316\u7684\u5927\u91cf\u5f00\u9500<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u4e00\u5b9a\u8981\u907f\u514d\u8bbe\u8ba1\u4e32\u8054\uff08cascading\uff09dynamic_cast\u8bbe\u8ba1<\/h4>\n\n\n\n<p>\u5982\u4e0b\u9762\u8fd9\u79cd\uff0c\u53ef\u8bfb\u6027\u5dee\uff0c\u5f00\u9500\u5927\uff0c\u800c\u4e14\u4f9d\u8d56\u5f88\u5f3a\uff0c\u8026\u5408\u5ea6\u8fc7\u9ad8\uff0c\u975e\u5e38\u8106\u5f31\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Window { ... };\n\/\/ ... \u4e00\u4e9b\u6d3e\u751f\u7c7b\u7684\u5b9a\u4e49\ntypedef std::vector&lt;std::tr1::shared_ptr&lt;Window&gt;&gt; VPW;\nVPW winPtrs;\n...\nfor (VPW::iterator iter = winPtrs.begin(); iter != winPtrs.end(); ++iter)\n{\n    if (SpecialWindow1* psw1 = dynamic_cast&lt;SpecialWindow1*&gt;(iter-&gt;get())) { ... }\n    else if (SpecialWindow2* psw2 = dynamic_cast&lt;SpecialWindow2*&gt;(iter-&gt;get())) { ... }\n    else if (SpecialWindow3* psw3 = dynamic_cast&lt;SpecialWindow3*&gt;(iter-&gt;get())) { ... }\n    ...\n}<\/code><\/pre>\n\n\n\n<p>\u89e3\u51b3\u8fd9\u79cd\u6700\u597d\u662f\u7528\u591a\u6001\uff0c\u4ece\u8bbe\u8ba1\u4e0a\u89e3\u51b3\u95ee\u9898<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class SpecialWindow1 : public Window {\npublic:\n    void handle() override {\n        \/\/ \u7279\u6709\u903b\u8f91\n    }\n};\nfor (auto iter = winPtrs.begin(); iter != winPtrs.end(); ++iter) {\n    (*iter)-&gt;handle(); \/\/ \u591a\u6001\u8c03\u7528\uff0c\u4e0d\u9700\u8981\u5173\u5fc3\u5177\u4f53\u7c7b\u578b\n}<\/code><\/pre>\n\n\n\n<p>\u603b\u7ed3\u4e00\u4e0b\uff1a<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-f6df36bff4ea19e1953bd074d8d4690a\">\u5c3d\u53ef\u80fd\u907f\u514d\u5f3a\u5236\u8f6c\u6362\uff0c\u7279\u522b\u662f\u5728\u6027\u80fd\u654f\u611f\u7684\u4ee3\u7801\u4e2d\u3002\u5982\u679c\u8bbe\u8ba1\u9700\u8981\u8f6c\u6362\uff0c\u5c1d\u8bd5\u5f00\u53d1\u79cd\u65e0\u9700\u8f6c\u6362\u7684\u66ff\u4ee3\u65b9\u6848\u3002<br>\u5f53\u9700\u8981\u5f3a\u5236\u8f6c\u6362\u65f6\uff0c\u5c1d\u8bd5\u5c06\u5176\u9690\u85cf\u5728\u51fd\u6570\u4e2d\u3002\u8fd9\u6837\u5ba2\u6237\u5c31\u53ef\u4ee5\u8c03\u7528\u8fd9\u4e2a\u51fd\u6570\uff0c\u800c\u4e0d\u662f\u5728\u81ea\u5df1\u7684\u4ee3\u7801\u4e2d\u8fdb\u884c\u5f3a\u5236\u8f6c\u6362\u3002<br>\u4f18\u5148\u9009\u7528C++\u98ce\u683c\u7684\u5f3a\u5236\u8f6c\u6362\uff0c\u800c\u4e0d\u662f\u8001\u5f0f\u7684\u5f3a\u5236\u8f6c\u6362\u3002\u5b83\u4eec\u66f4\u5bb9\u6613\u88ab\u770b\u5230\uff0c\u800c\u4e14\u5b83\u4eec\u5bf9\u6240\u505a\u7684\u4e8b\u60c5\u66f4\u5177\u4f53\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u907f\u514d\u8fd4\u56dehandles\u6307\u5411\u5bf9\u8c61\u7684\u5185\u90e8\u90e8\u5206<\/h3>\n\n\n\n<p>handle\u5c31\u662f\u53e5\u67c4\uff0c\u5f15\u7528\uff0c\u6307\u9488\u548c\u8fed\u4ee3\u5668\u90fd\u7b97\u662f\u53e5\u67c4<\/p>\n\n\n\n<p>\u8fd9\u4e00\u5757\u5185\u5bb9\u6709\u70b9\u4e0d\u592a\u7406\u89e3\u4e86\uff0c\u8fd8\u662f\u4ece\u4f8b\u5b50\u5165\u624b<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Point {  \/\/ \u8868\u793a\u70b9\u7684\u7c7b\npublic:\n    Point(int x, int y);\n    ...\n    void setX(int newVal);\n    void setY(int newVal);\n    ...\n};\n\nstruct RectData {  \/\/ \u77e9\u5f62\u7684\u70b9\u6570\u636e\n    Point ulhc;  \/\/ ulhc = \"upper left-hand corner\" (\u5de6\u4e0a\u89d2\u70b9)\n    Point lrhc;  \/\/ lrhc = \"lower right-hand corner\" (\u53f3\u4e0b\u89d2\u70b9)\n};\n\nclass Rectangle {\npublic:\n    Point&amp; upperLeft() const {  \/\/ \u8fd4\u56de\u5de6\u4e0a\u89d2\u70b9\u7684\u5f15\u7528\n        return pData-&gt;ulhc;\n    }\n\nprivate:\n    RectData* pData;  \/\/ \u6307\u5411\u77e9\u5f62\u6570\u636e\u7684\u6307\u9488\n};<\/code><\/pre>\n\n\n\n<p>\u8fd9\u4e2a\u4f8b\u5b50\u7684\u9519\u8bef\u56fa\u7136\u975e\u5e38\u660e\u663e\u3002\u5bf9\u4e8e\u6211const Rectangle\u5bf9\u8c61\uff0c\u6211\u5c45\u7136\u8fd4\u56de\u5185\u90e8\u5bf9\u8c61\u7684\u5f15\u7528\uff0c\u90a3\u8fd9\u6837\u53ef\u4ee5\u8f7b\u677e\u7684\u53bb\u4fee\u6539\u5185\u90e8\u6570\u636e\uff0c\u8fd9\u662f\u4e0d\u53ef\u53d6\u7684\u3002<\/p>\n\n\n\n<p>\u4fee\u6539\u53ef\u4ee5\u5148\u52a0\u4e00\u4e2aconst\uff0c\u8fd4\u56de const &amp;\u7c7b\u578b\u6570\u636e\u3002\u4f46\u603b\u4e4b\u8fd8\u662f\u4e0d\u5b89\u5168\u5c31\u662f\u4e86\u3002\u5982\u679c\u5185\u90e8\u6570\u636e\u88ab\u91ca\u653e\u6389\uff0c\u6b64\u65f6\u53ef\u80fd\u4f1a\u6709\u60ac\u7a7a\u6307\u9488\u8fd9\u6837\u7684\u95ee\u9898\u3002\u56e0\u6b64\u8fd8\u662f\u4e0d\u8981\u8fd9\u4e48\u505a\uff0c\u8001\u8001\u5b9e\u5b9e\u8fd4\u56de\u4e00\u4e2a\u65b0\u5bf9\u8c61<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Rectangle {\npublic:\n    Point upperLeft() const {  \/\/ \u8fd4\u56de\u503c\u62f7\u8d1d\n        return pData-&gt;ulhc;\n    }\n\nprivate:\n    RectData* pData;  \/\/ \u6307\u5411\u77e9\u5f62\u6570\u636e\u7684\u6307\u9488\n};<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u4e3a\u201c\u5f02\u5e38\u5b89\u5168\u201d\u52aa\u529b\u662f\u503c\u5f97\u7684<\/h3>\n\n\n\n<p>\u57fa\u672c\u8fd8\u662f\u544a\u8bc9\u8981RAII\uff0c\u4fdd\u8bc1\u5b9e\u9645\u6307\u5411\u4e0d\u4e3a\u7a7a\u8fd9\u4e9b\u3002<\/p>\n\n\n\n<p>\u4f8b\u5982\u4e0b\u9762\u7684\u4f8b\u5b50\uff0c\u4ece\u5f02\u5e38\u5b89\u5168\u7684\u89d2\u5ea6\u6765\u770b\uff0c\u6709\u4e24\u4e2a\u8981\u6c42\uff0c\u4e0b\u9762\u7684\u90fd\u4e0d\u6ee1\u8db3<\/p>\n\n\n\n<p>1.\u4e0d\u6cc4\u9732\u8d44\u6e90<br>2.\u4e0d\u5141\u8bb8\u6570\u636e\u7ed3\u6784\u6210\u4e3a\u635f\u574f\u7684\u72b6\u6001<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class PrettyMenu {\npublic:\n    void changeBackground(std::istream&amp; imgSrc);  \/\/ \u6539\u53d8\u80cc\u666f\u56fe\u50cf\n\nprivate:\n    Mutex mutex;           \/\/ \u8fd9\u4e2a\u5bf9\u8c61\u7684\u4e92\u65a5\u91cf\uff08\u7528\u4e8e\u7ebf\u7a0b\u540c\u6b65\uff09\n    Image* bgImage;        \/\/ \u5f53\u524d\u7684\u80cc\u666f\u56fe\u50cf\n    int imageChanges;      \/\/ \u56fe\u50cf\u88ab\u6539\u53d8\u7684\u6b21\u6570\n};\n\nvoid PrettyMenu::changeBackground(std::istream&amp; imgSrc) {\n    lock(&amp;mutex);                \/\/ \u83b7\u53d6\u4e92\u65a5\u91cf\n    delete bgImage;             \/\/ \u5220\u9664\u539f\u6765\u7684\u80cc\u666f\u56fe\u50cf\n    ++imageChanges;             \/\/ \u66f4\u65b0\u56fe\u50cf\u53d8\u5316\u8ba1\u6570\n    bgImage = new Image(imgSrc); \/\/ \u5b89\u88c5\u65b0\u7684\u80cc\u666f\u56fe\u50cf\n    unlock(&amp;mutex);             \/\/ \u91ca\u653e\u4e92\u65a5\u91cf\n}<\/code><\/pre>\n\n\n\n<p>\u51e0\u4e2a\u7ecf\u5178\u95ee\u9898\uff0c\u4e00\u662fnew \u548cdelete\u53ef\u80fd\u629b\u51fa\u5f02\u5e38\uff0c\u90a3\u4e48\u8d44\u6e90\u65e0\u6cd5\u91ca\u653e\u3002\u540c\u65f6\uff0c\u5728new\u9636\u6bb5\u51fa\u73b0\u5f02\u5e38\uff0c\u4f1a\u5bfc\u81f4\u5f53\u524d\u6570\u636e\u7ed3\u6784\u7684\u5b9e\u9645\u6307\u5411\u4e3a\u7a7a\u3002<\/p>\n\n\n\n<p>\u89e3\u51b3\u65b9\u6cd5\u7528\u7ed3\u5408\u7684\u65b9\u5f0f\uff0c\u90fd\u7528C++\u4e2d\u5c01\u88c5\u7684\u6bd4\u8f83\u597d\u7684\u5de5\u5177<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void PrettyMenu::changeBackground(std::istream&amp; imgSrc) {\n    Lock m1(&amp;mutex); \/\/\u8d85\u51fa\u4f5c\u7528\u57df\u81ea\u52a8\u91ca\u653e\n    bgImage.reset(new Image(imgSrc)); \/\/ \u7528\u65b0new\u7684\u66ff\u6362\u5185\u90e8\u7ed3\u679c\n    ++ imageChanges;\n}<\/code><\/pre>\n\n\n\n<p>\u6240\u4ee5\u5927\u6982\u8fd8\u662f\u5229\u7528\u5c01\u88c5\u597d\u7684\u5de5\u5177\uff1f\u5176\u4e2d\u8fd9\u4e2aLock\u5bf9\u8c61\u7ba1\u7406\uff0c\u662f\u901a\u8fc7\u6784\u9020\u51fd\u6570lock\uff0c\u6790\u6784\u51fd\u6570unlock\uff0c\u7136\u540e\u7981\u6b62\u62f7\u8d1d\u8d4b\u503c\u51fd\u6570\uff08\u4e4b\u524d\u8bf4\u8fc7\uff09\uff0c\u672c\u8d28\u662f\u4e00\u4e2a\u7c7b\u3002<\/p>\n\n\n\n<p>\u5bf9\u4e8e\u5f02\u5e38\u5b89\u5168\u6027\uff0c\u4e00\u822c\u6709\u4e09\u79cd\u4fdd\u8bc1<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u57fa\u672c\u627f\u8bfa\uff08Basic Guarantee\uff09<br>\u5982\u679c\u51fd\u6570\u53d1\u751f\u5f02\u5e38\uff0c\u7a0b\u5e8f\u7684\u6240\u6709\u5185\u90e8\u72b6\u6001\u4fdd\u6301\u4e00\u81f4\uff0c\u4e0d\u4f1a\u4ea7\u751f\u672a\u5b9a\u4e49\u884c\u4e3a\u3002<\/li>\n\n\n\n<li>\u5f3a\u70c8\u627f\u8bfa\uff08Strong Guarantee\uff09<br>\u5982\u679c\u51fd\u6570\u53d1\u751f\u5f02\u5e38\uff0c\u7a0b\u5e8f\u7684\u72b6\u6001\u4e0d\u53d8\uff0c\u6548\u679c\u7c7b\u4f3c\u4e8e\u201c\u8981\u4e48\u6210\u529f\uff0c\u8981\u4e48\u5b8c\u5168\u5931\u8d25\u201d\u3002<\/li>\n\n\n\n<li>\u4e0d\u629b\u51fa\u5f02\u5e38\uff08No-Throw Guarantee\uff09<br>\u5728\u6b64\u4fdd\u8bc1\u4e0b\uff0c\u51fd\u6570\u4e0d\u4f1a\u629b\u51fa\u5f02\u5e38\u3002\u53ea\u6709\u975e\u5e38\u7279\u6b8a\u7684\u60c5\u51b5\u4e0b\uff0c\u51fd\u6570\u7684\u64cd\u4f5c\u624d\u4f1a\u5b8c\u5168\u4e0d\u629b\u51fa\u5f02\u5e38\uff0c\u4e14\u4f1a\u5c3d\u91cf\u907f\u514d\u5f02\u5e38\u5bf9\u7cfb\u7edf\u9020\u6210\u5f71\u54cd\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u4e0d\u629b\u51fa\u5f02\u5e38\u53ef\u4ee5\u5728\u51fd\u6570\u540e\u5199\u4e00\u4e2a<code>noexcept<\/code>\uff0c\u4f46\u662f\u53ea\u662f\u544a\u8bc9\u7f16\u8bd1\u5668\u4e0d\u4f1a\u629b\u51fa\u3002\u5982\u679c\u4f60\u771f\u7684\u629b\u51fa\u7a0b\u5e8f\u5c31\u4f1a\u76f4\u63a5\u5f02\u5e38\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int DoSomething() noexcept {\n    \/\/ \u8be5\u51fd\u6570\u4e0d\u4f1a\u629b\u51fa\u4efb\u4f55\u5f02\u5e38\n}<\/code><\/pre>\n\n\n\n<p>\u53e6\u4e00\u79cd\u63d0\u4f9b\u5f3a\u70c8\u4fdd\u969c\u7684\u65b9\u5f0f\u662fcopy and swap;<\/p>\n\n\n\n<p>\u5177\u4f53\u6765\u8bf4\u5c31\u662f\u5148\u521b\u5efa\u4e00\u4e2a\u5bf9\u8c61\uff0c\u518d\u4fee\u6539\u526f\u672c\u4ea4\u6362\u3002\u4e0d\u8fc7\u6548\u7387\u80af\u80fd\u6bd4\u8f83\u4f4e\uff0c\u6709\u65f6\u5019\u53d7\u9650\u4e8e\u7ed3\u6784\uff0c\u90a3\u6700\u7ec8\u4e5f\u53ea\u80fd\u505a\u5230\u57fa\u672c\u7684\u4fdd\u8bc1\u3002<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-530f3e5822e46e40bc1b0fe2c8489749\">\u5f02\u5e38\u5b89\u5168\u7684\u51fd\u6570\u4e0d\u4f1a\u6cc4\u6f0f\u8d44\u6e90\uff0c\u4e5f\u4e0d\u5141\u8bb8\u6570\u636e\u7ed3\u6784\u635f\u574f\uff0c\u5373\u4f7f\u5728\u629b\u51fa\u5f02\u5e38\u65f6\u4e5f\u662f\u5982\u6b64\u3002\u8fd9\u4e9b\u51fd\u6570\u63d0\u4f9b\u4e86\u57fa\u672c\u7684\u3001\u5f3a\u7684\u6216\u65e0\u629b\u51fa\u7684\u4fdd\u8bc1\u3002<br>\u5f3a\u4fdd\u8bc1\u901a\u5e38\u53ef\u4ee5\u901a\u8fc7\u590d\u5236-\u4ea4\u6362\u5b9e\u73b0\uff0c\u4f46\u5e76\u4e0d\u662f\u5bf9\u6240\u6709\u51fd\u6570\u90fd\u9002\u7528<br>\u51fd\u6570\u63d0\u4f9b\u7684\u4fdd\u8bc1\u901a\u5e38\u4e0d\u4f1a\u8d85\u8fc7\u5b83\u8c03\u7528\u7684\u51fd\u6570\u7684\u6700\u5f31\u4fdd\u8bc1\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u4e86\u89e3\u5185\u8054\u51fd\u6570<\/h3>\n\n\n\n<p>\u672c\u8d28\u5c31\u662f\u4ee3\u7801\u66ff\u6362\uff0c\u628a\u4ee3\u7801\u66ff\u6362\u5230\u8c03\u7528\u7684\u5730\u65b9\u3002\u4e00\u822c\u662f\u7f16\u8bd1\u65f6\u5019\u8c03\u7528\uff0c\u4e0d\u8fc7\u53ef\u80fd\u5bfc\u81f4\u4ee3\u7801\u81a8\u80c0\u4e4b\u7c7b\u7684\u95ee\u9898\u3002<\/p>\n\n\n\n<p>inline\u672c\u8eab\u5b9e\u8d28\u5c31\u662f\u7ed9\u7f16\u8bd1\u5668\u4e00\u4e2a\u5efa\u8bae\uff0c\u628a\u8fd9\u6bb5\u51fd\u6570\u5d4c\u5165\u8fc7\u53bb\u3002<\/p>\n\n\n\n<p>\u6240\u4ee5\u6765\u8bf4\uff0c\u592a\u590d\u6742\u7684\u4ee3\u7801\uff0c\u9700\u8981\u9012\u5f52\u7684\u4ee3\u7801\uff0c\u5faa\u73af\u591a\u7684\u4ee3\u7801\uff0c\u4ee5\u53ca\u865a\u51fd\u6570\u4ee3\u7801\u5c31\u4e0d\u4f1a\u8c03\u7528\u3002\u865a\u51fd\u6570\u6839\u672c\u4e5f\u5c31\u4e0d\u5141\u8bb8\u5185\u8054\uff08\u9700\u8981\u5230\u8fd0\u884c\u671f\u624d\u77e5\u9053\uff09<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>inline void f(){ ...} \/\/ \u4e00\u4e2afunc\nvoid (*pf)() = f;     \/\/ pf \u6307\u5411 f\nf();  \/\/ \u8fd9\u4e2a\u8c03\u7528\u4f1a\u88ab\u5185\u8054\uff0c\u666e\u901a\u7684call\npf(); \/\/ \u8fd9\u4e2a\u4e0d\u4f1a\uff0c\u662f\u901a\u8fc7\u51fd\u6570\u6307\u9488<\/code><\/pre>\n\n\n\n<p>\u5bf9\u4e8e\u6784\u9020\u6790\u6784\u51fd\u6570\uff0c\u4e00\u822c\u4e0d\u9002\u5408\u6784\u9020\u51fd\u6570\u3002\u5bf9\u4e8e\u6709\u7ee7\u627f\u60c5\u51b5\uff0c\u6709\u5f02\u5e38\u60c5\u51b5\uff0c\u6709\u865a\u51fd\u6570\u7684\u8981\u8003\u8651\u5177\u4f53\u5b9e\u73b0\u662f\u6bd4\u8f83\u9ebb\u70e6\u7684\uff0c\u53ea\u662f\u7f16\u8bd1\u5668\u5e2e\u5fd9\u5b8c\u6210\u4e86\u3002 <\/p>\n\n\n\n<p>\u5bf9\u4e8etemplate\u7684\u5b9e\u73b0\u5e94\u8be5\u5c3d\u91cf\u907f\u514dinline\uff0c\u7b80\u5355\u6765\u8bf4\u4f60\u53ef\u80fd\u4e0d\u6e05\u695a\u5177\u4f53\u7684\u662f\u73b0\u5b9e\u600e\u4e48\u6837\u7684\uff0c\u662f\u5426\u9002\u7528\u4e8e\u5168\u90e8\u7684\u751f\u6210\u7c7b\u578b\uff0c\u5177\u4f53\u540e\u7eed\u4f1a\u63d0\u5230\u3002<\/p>\n\n\n\n<p>\u603b\u7ed3\uff1a<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-dd928948a8d58f224653a66e7081ee4d\">\u5c06\u5927\u591a\u6570\u5185\u8054\u64cd\u4f5c\u9650\u5236\u4e3a\u5c0f\u578b\u7684\u3001\u9891\u7e41\u8c03\u7528\u7684\u51fd\u6570\u3002\u8fd9\u6709\u52a9\u4e8e\u8c03\u8bd5\u548c\u4e8c\u8fdb\u5236\u7a0b\u5e8f\u7684\u5347\u7ea7\uff0c\u6700\u5927\u9650\u5ea6\u5730\u51cf\u5c11\u6f5c\u5728\u7684\u4ee3\u7801\u81a8\u80c0\uff0c\u5e76\u6700\u5927\u9650\u5ea6\u5730\u63d0\u9ad8\u7a0b\u5e8f\u901f\u5ea6\u3002<br>\u4e0d\u8981\u4ec5\u4ec5\u56e0\u4e3a\u51fd\u6570\u6a21\u677f\u51fa\u73b0\u5728\u5934\u6587\u4ef6\u4e2d\uff0c\u5c31\u5c06\u5b83\u4eec\u58f0\u660e\u4e3a\u5185\u8054\u6a21\u677f\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u5c06\u6587\u4ef6\u95f4\u7684\u7f16\u8bd1\u4f9d\u5b58\u5173\u7cfb\u964d\u5230\u6700\u4f4e<\/h3>\n\n\n\n<p>C++\u5728\u5206\u79bb\u63a5\u53e3\u548c\u5b9e\u73b0\u65b9\u9762\u505a\u7684\u4e0d\u591f\u597d\u3002\u7c7b\u4e0d\u4ec5\u6307\u5b9a\u4e86\u7c7b\u63a5\u53e3\uff0c\u8fd8\u6307\u5b9a\u4e86\u76f8\u5f53\u591a\u7684\u5b9e\u73b0\u7ec6\u8282\u3002<\/p>\n\n\n\n<p>\u6211\u4eec\u8981\u5c3d\u91cf\u5b9e\u73b0\u6700\u5c0f\u5316\u7f16\u8bd1\u4f9d\u8d56\uff0c\u90a3\u4e3a\u4e86\u5b9e\u73b0\u8fd9\u4e2a\uff0c\u4e00\u822c\u662f\u4e24\u79cd\u6307\u5bfc\u601d\u60f3\uff1a\u53e5\u67c4\u7c7b\u548c\u63a5\u53e3\u7c7b\u3002<br>\u5e93\u5934\u6587\u4ef6\u5e94\u8be5\u4ee5\u5b8c\u6574\u4e14\u4ec5\u5305\u542b\u58f0\u660e\u7684\u5f62\u5f0f\u5b58\u5728\uff0c\u65e0\u8bba\u662f\u5426\u6d89\u53ca\u6a21\u677f\u90fd\u9002\u7528\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u53e5\u67c4\u7c7b<\/h4>\n\n\n\n<p>\u5728\u4e0b\u9762\u7684\u4f8b\u5b50\u4e2d\uff0c\u518d\u8fd4\u56de\u503c\u4e2d\u5982\u679c\u6709Date\u7c7b\uff0c\u90a3\u4e48\u53ea\u9700\u8981\u77e5\u9053\u5177\u4f53\u7684\u58f0\u660e\u5373\u53ef\uff0c\u4e0d\u9700\u8981\u5177\u4f53\u7684\u5b9e\u73b0\uff0c\u51cf\u5c0f\u4e86\u7f16\u8bd1\u7684\u4f9d\u8d56\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include \"datefwd.h\" \/\/ Date\u7c7b\u7684\u524d\u5411\u58f0\u660e\n\nDate today(); \/\/ \u58f0\u660e\u4e00\u4e2a\u8fd4\u56deDate\u5bf9\u8c61\u7684\u51fd\u6570\nvoid clearAppointments(Date d); \/\/ \u58f0\u660e\u4e00\u4e2a\u63a5\u53d7Date\u5bf9\u8c61\u7684\u51fd\u6570<\/code><\/pre>\n\n\n\n<p>\u5bf9\u4e8e\u4e0b\u9762\u7684person\u7c7b\u5b9e\u73b0\uff0c\u5177\u4f53\u7684\u5b9e\u73b0\u662f\u901a\u8fc7\u6210\u5458\u53d8\u91cfpImpl\u6307\u5411PersonImpl\u95f4\u63a5\u7684\u5b9e\u73b0\uff0c\u672c\u8eab\u4e0d\u53bb\u5b9e\u73b0\u529f\u80fd\u3002\u90a3\u4e48\u5bf9\u4e8ePerson\u7684\u5934\u6587\u4ef6\uff0c\u53ea\u9700\u8981\u5305\u542bPersonImpl\u7684\u5b9a\u4e49\uff0c\u4ece\u800c\u51cf\u5c11\u7f16\u8bd1\u4f9d\u8d56\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include \"Person.h\"     \/\/  \u6b63\u5728\u5b9e\u73b0Person\u7c7b\uff0c\u5fc5\u987b\u5305\u542b\u7c7b\u5b9a\u4e49\n#include \"PersonImpl.h\" \/\/  Person\u7684\u5b9e\u73b0\u7c7b\u5b9a\u4e49 \u4e0e Person \u5b8c\u5168\u76f8\u540c\u63a5\u53e3\n\nPerson::Person(const std::string&amp; name, const Date&amp; birthday, const Address&amp; addr)\n    : pImpl(new PersonImpl(name, birthday, addr)) {} \/\/ \u4f7f\u7528\u6307\u9488\u5f15\u7528\u5b9e\u73b0\u7c7b\n\nstd::string Person::name() const {\n    return pImpl-&gt;name(); \/\/ \u8c03\u7528PersonImpl\u7684\u63a5\u53e3\n}<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">\u63a5\u53e3\u7c7b<\/h4>\n\n\n\n<p>\u8fd9\u4e2aperson\u7c7b\u4f5c\u4e3a\u57fa\u7c7b\u63d0\u4f9b\u63a5\u53e3\uff0c\u91c7\u7528\u5de5\u5382\u6a21\u5f0f\u4ea7\u751f\u6d3e\u751f\u7c7b\u5bf9\u8c61<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Person {\npublic:\n    virtual ~Person(); \/\/ \u865a\u6790\u6784\u51fd\u6570\uff0c\u786e\u4fdd\u6d3e\u751f\u7c7b\u6b63\u786e\u9500\u6bc1\n    virtual std::string name() const = 0;       \/\/ \u7eaf\u865a\u51fd\u6570\uff1a\u8fd4\u56de\u540d\u5b57\n    virtual std::string birthDate() const = 0; \/\/ \u7eaf\u865a\u51fd\u6570\uff1a\u8fd4\u56de\u751f\u65e5\n    virtual std::string address() const = 0;   \/\/ \u7eaf\u865a\u51fd\u6570\uff1a\u8fd4\u56de\u5730\u5740\n\n    \/\/ \u5de5\u5382\u65b9\u6cd5\uff1a\u9759\u6001\u6210\u5458\u51fd\u6570\uff0c\u7528\u4e8e\u521b\u5efaPerson\u5bf9\u8c61\uff0c\u8fd4\u56deshared_ptr\u3001\n    \/\/ \u5177\u4f53\u7684\u89c6\u7ebf\u90fd\u4ea4\u7ed9\u6d3e\u751f\u7c7b\u53bb\u505a\n    static std::tr1::shared_ptr&lt;Person&gt; create(\n        const std::string&amp; name,\n        const Date&amp; birthday,\n        const Address&amp; addr\n    );\n};\n\nclass RealPerson : public Person { \/\/ RealPerson\u7ee7\u627f\u81eaPerson\npublic:\n    \/\/ \u6784\u9020\u51fd\u6570\uff0c\u521d\u59cb\u5316\u6210\u5458\u53d8\u91cf\n    RealPerson(const std::string&amp; name, const Date&amp; birthday, const Address&amp; addr)\n        : theName(name), theBirthDate(birthday), theAddress(addr) {}\n\n    \/\/ \u5b9e\u73b0\u63a5\u53e3\u7c7b\u7684\u7eaf\u865a\u51fd\u6570\n    virtual std::string name() const override { return theName; }\n    virtual std::string birthDate() const override { return theBirthDate.toString(); }\n    virtual std::string address() const override { return theAddress.toString(); }\n\nprivate:\n    std::string theName;  \/\/ \u59d3\u540d\n    Date theBirthDate;    \/\/ \u751f\u65e5\n    Address theAddress;   \/\/ \u5730\u5740\n};\n\n\/\/ \u6700\u7ec8\u5177\u4f53\u7684\u5b9e\u73b0\nstd::tr1::shared_pte&lt;Person&gt;\nPerson::create(const std::string&amp; name, const Date&amp; birthday, const Address&amp; addr)\n{\n    return std::shared_ptr&lt;Person&gt;(new RealPerson(name,birthday,addr));\n}<\/code><\/pre>\n\n\n\n<p>\u8fd9\u6837\uff0c\u6211\u4eec\u867d\u7136\u8fd4\u56de\u7684\u662fPerson\uff0c\u4f46\u5b9e\u9645\u4e0a\u662fRealPerson\u7684\u5b9e\u73b0\uff0c\u5c31\u9690\u85cf\u4e86\u6211\u4eec\u5b9e\u9645\u7684\u5b9e\u73b0\u903b\u8f91\u3002\u8fd9\u6837\u4fbf\u4e8e\u6211\u4eec\u4fee\u6539\u5e95\u5c42\u5b9e\u73b0\uff0c\u4e0d\u9700\u8981\u91cd\u65b0\u7f16\u8bd1\u5ba2\u6237\u7684\u4ee3\u7801\u3002<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-ae0d34fb37dfd3118b180f31758cc870\">\u6700\u5c0f\u5316\u7f16\u8bd1\u4f9d\u8d56\u5173\u7cfb\u80cc\u540e\u7684\u4e00\u822c\u601d\u60f3\u662f\u4f9d\u8d56\u58f0\u660e\u800c\u4e0d\u662f\u5b9a\u4e49\u3002\u57fa\u4e8e\u8fd9\u79cd\u601d\u60f3\u7684\u4e24\u79cd\u65b9\u6cd5\u662f\u53e5\u67c4\u7c7b\u548c\u63a5\u53e3\u7c7b\u5e93\u5934\u6587\u4ef6\u5e94\u8be5\u4ee5\u5b8c\u6574\u4e14\u4ec5\u5305\u542b\u58f0\u660e\u7684\u5f62\u5f0f\u5b58\u5728\u3002\u65e0\u8bba\u662f\u5426\u6d89\u53ca\u6a21\u677f\uff0c\u8fd9\u90fd\u9002\u7528\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u7ee7\u627f\u4e0e\u9762\u5411\u5bf9\u8c61\u8bbe\u8ba1<\/h2>\n\n\n\n<p>\u516c\u5171\u7ee7\u627f\u7684\u610f\u601d\u662f\u201cis-a\u201d\u3002\u865a\u51fd\u6570\u610f\u5473\u7740\u201c\u63a5\u53e3\u5fc5\u987b\u7ee7\u627f\u201d\uff0c\u800c\u975e\u865a\u51fd\u6570\u610f\u5473\u7740\u201c\u63a5\u53e3\u548c\u5b9e\u73b0\u90fd\u5fc5\u987b\u7ee7\u627f\u201d\u3002<\/p>\n\n\n\n<p>\u6bd4\u5982\u8bf4\u57fa\u7c7b\u4e3a\u9e1f\uff0c\u5b50\u7c7b\u4e3a\u9ebb\u96c0\u3002\u90a3\u4e48\u9ebb\u96c0\u4e00\u5b9a\u8981\u662f\u4e00\u79cd\u9e1f\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u786e\u5b9apublic\u7ee7\u627f\u5851\u819c\u51fa <strong>is-a<\/strong> \u5173\u7cfb<\/h3>\n\n\n\n<p>\u8fd9\u7ae0\u5927\u6982\u60f3\u8bf4\u4e24\u4e2a\u4e8b\uff0c\u4e00\u662fPublic\u7ee7\u627f\u7b49\u4ef7\u4e8e is-a \uff0c\u4e8c\u662f\u4e0d\u8981\u8fc7\u4e8e\u4f9d\u8d56\u76f4\u89c9\u3002<\/p>\n\n\n\n<p>\u6bd4\u5982\u8bf4\u8bbe\u8ba1\u4e00\u79cd\u7c7b\u9e1f\uff0c\u865a\u51fd\u6570\u98de\uff0c\u610f\u5473\u7740\u5fc5\u987b\u7ee7\u627f\uff0c\u4f46\u4f01\u9e45\u4e3a\u4e00\u79cd\u9e1f\u663e\u7136\u4e0d\u4f1a\u98de\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u907f\u514d\u63a9\u76d6\u7ee7\u627f\u800c\u6765\u7684\u540d\u79f0<\/h3>\n\n\n\n<p>\u5728C++\u4e2d\uff0c\u540d\u5b57\u7684\u906e\u6321\u5176\u5b9e\u548c\u7ee7\u627f\u65e0\u5173\uff0c\u662f\u548c\u8303\u56f4\u6709\u5173<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int x;\nvoid someFunc()\n{\n    double x;\n    std::cin &gt;&gt; x;\n}<\/code><\/pre>\n\n\n\n<p>\u8fd9\u91cc\u7684\u903b\u8f91\u662f\uff0c\u73b0\u5728\u5c0f\u8303\u56f4\u5185\u627e\u5230x\uff0c\u6ca1\u6709\u518d\u5411\u5916\u627e\u3002\u56e0\u6b64cin\u770b\u5230\u7684\u662f\u51fd\u6570\u5185\u7684x\u3002<\/p>\n\n\n\n<p>\u5bf9\u4e8e\u7ee7\u627f\uff0c\u4e5f\u662f\u53ef\u4ee5\u8fd9\u6837\u770b\u5f85\u7684\u3002\u5bf9\u4e8eDerived\u7c7b\uff0c\u8c03\u7528mf1\uff0c\u4f1a\u4f18\u5148\u770b\u81ea\u5df1\u7c7b\u5185\u662f\u5426\u5b58\u5728\uff0c\u5b58\u5728\u56e0\u6b64\u8c03\u7528\u81ea\u8eabmf1\uff1bmf2\uff0cmf3\u5219\u8c03\u7528\u7236\u7c7b<\/p>\n\n\n\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-ad2f72ca wp-block-group-is-layout-flex\">\n<pre class=\"wp-block-code\"><code>class Base{\nprivate:\n  int x;\npublic:\n    virtual void mf1() = 0;\n    virtual void mf2();\n    void mf3();\n};\n\nclass Derived : public Base {\npublic :\n    virtual void mf1();\n    void mf4();\n}\nvoid Derived::mf4(){ mf2(); }<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/www.haruhi.fans\/wp-content\/uploads\/2025\/05\/image-35.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"417\" height=\"217\" data-original=\"https:\/\/www.haruhi.fans\/wp-content\/uploads\/2025\/05\/image-35.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-4006\" style=\"width:329px;height:auto\"  sizes=\"auto, (max-width: 417px) 100vw, 417px\" \/><\/div><\/figure>\n<\/div>\n\n\n\n<p>\u4f46\u5728\u8003\u8651\u91cd\u8f7d\u65f6\u5019\u5c31\u53ef\u80fd\u6709\u4e00\u70b9\u95ee\u9898\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Base {\nprivate:\n    int x;\npublic:\n    virtual void mf1() = 0;\n    virtual void mf1(int);\n    virtual void mf2();\n    void mf3();\n    void mf3(double);\n}\nclass Derived : public Base{\npublic:\n    virtual void mf1();\n    void mf3();\n    void mf4();\n}\n\nDerived d;\nint x;\n\nd.mf1();  \/\/ ok\uff0c\u8c03\u7528Derived::mf1()\nd.mf1(x); \/\/ \u9519\u8bef\uff01Derived::mf1\u9690\u85cf\u4e86Base::mf1\nd.mf2();\nd.mf3();  \/\/ ok\uff0c\u8c03\u7528Derived::mf1()\nd.mf3(x);class Base {\nprivate:\n    int x;\npublic:\n    virtual void mf1() = 0;\n    virtual void mf1(int);\n    virtual void mf2();\n    void mf3();\n    void mf3(double);\n}\nclass Derived : public Base{\npublic:\n    virtual void mf1();\n    void mf3();\n    void mf4();\n}\n\nDerived d;\nint x;\n\nd.mf1();  \/\/ ok\uff0c\u8c03\u7528Derived::mf1\nd.mf1(x); \/\/ \u9519\u8bef\uff01Derived::mf1\u9690\u85cf\u4e86Base::mf1\nd.mf2();  \/\/ ok,\u8c03\u7528Base::mf2\nd.mf3();  \/\/ ok\uff0c\u8c03\u7528Derived::mf1\nd.mf3(x); \/\/ \u9519\u8bef\uff01Derived::mf1\u9690\u85cf\u4e86Base::mf1<\/code><\/pre>\n\n\n\n<p>\u8fd9\u91cc\u770b\u5230\uff0c\u540d\u79f0\u9690\u85cf\u53d6\u51b3\u4e8e\u540d\u79f0\u672c\u8eab\uff0c\u5bfc\u81f4\u4e86<strong>\u6d3e\u751f\u7c7b\u65e0\u6cd5\u4f7f\u7528\u6765\u81ea\u57fa\u7c7b\u7684\u91cd\u8f7d\u51fd\u6570<\/strong>\u3002<\/p>\n\n\n\n<p>\u4e00\u79cd\u89e3\u51b3\u65b9\u5f0f\u662f\u4f7f\u7528\u5173\u952e\u5b57using\uff0c\u4e2a\u4eba\u7406\u89e3\u662f\u628a\u5916\u9762\u4e00\u5c42\u7684\u4e1c\u897f\u5148\u653e\u8fdb\u6765\u4e86\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Derived : public Base {\npublic :\n    using Base::mf1; \/\/ \u8ba9Base\u4e2d\u6240\u6709\u540d\u79f0\u4e3amf1\u548cmf3\u7684\uff08public\uff09\u91cd\u8f7d\u90fd\u5728Derived\u7684\u4f5c\u7528\u57df\u4e2d\u53ef\u89c1\n    using Base::mf3;\n    ...\n}\nd.mf1();  \/\/ ok\uff0c\u8c03\u7528Derived::mf1\nd.mf1(x); \/\/ ok\uff0c\u8c03\u7528Base::mf1<\/code><\/pre>\n\n\n\n<p>\u5982\u679c\u4e0d\u60f3\u8981\u6253\u5f00\u51fd\u6570\u7684\u5168\u90e8\u7248\u672c\uff08\u5728private\u7248\u672c\u4e2d\uff09\uff0c\u53ef\u4ee5\u505a\u4e00\u4e2a\u7b80\u5355\u7684\u8f6c\u53d1\u51fd\u6570\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Base{\npublic:\n    virtual void mf1() = 0;\n    virtual void mf1(int);\n    ...\n}\nclass Derived : private Base{ \/\/ private\u7ee7\u627f\npublic:\n    virtual void mf1(){\n        Base::mf1(); \/\/\u95f4\u63a5\u8f6c\u53d1\u5230\u5185\u90e8\u7684Base\u7c7b\u4e2d\n    }\n}\n\nDerived d;\nint x;\nd.mf1();  \/\/ ok!\nd.mf1(x); \/\/ no<\/code><\/pre>\n\n\n\n<p>\u603b\u7ed3\u4e00\u4e0b\uff1a<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-db07ea1fa1dda547b4d41e8360537a7a\">\u6d3e\u751f\u7c7b\u4e2d\u7684\u540d\u79f0\u9690\u85cf\u57fa\u7c7b\u540d\u79f0\uff0c\u5728public\u7ee7\u627f\u4e0b\u662f\u4e0d\u53ef\u53d6\u7684\uff08\u8bbe\u8ba1\u7406\u5ff5 is-a \u4e0a\u6765\u8bf4\uff09<br>\u8981\u4f7f\u9690\u85cf\u7684\u540d\u79f0\u518d\u6b21\u53ef\u89c1\uff0c\u4f7f\u7528using\u6216\u8005\u8f6c\u53d1\u51fd\u6570\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u533a\u5206\u63a5\u53e3\u7ee7\u627f\u548c\u5b9e\u73b0\u7ee7\u627f<\/h3>\n\n\n\n<p>\u7eaf\u865a\u51fd\u6570\uff1a\u76ee\u7684\u662f\u8ba9\u6d3e\u751f\u7c7b\u7ee7\u627f\u63a5\u53e3\u3002\u53ef\u4ee5\u4e3a\u7eaf\u865a\u51fd\u6570\u63d0\u4f9b\u5b9a\u4e49\uff0c\u4f46\u662f\u8c03\u7528\u7684\u552f\u4e00\u65b9\u5f0f\u5c31\u662f\u7528\u7c7b\u540d\u6307\u5b9a\u8c03\u7528\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ps1-&gt;draw();        \/\/ \u8c03\u7528\u5b50\u7c7b\u865a\u51fd\u6570draw\nps1-&gt;Shape::draw(); \/\/ \u8c03\u7528\u7236\u7c7b\u7684\u865a\u51fd\u6570draw<\/code><\/pre>\n\n\n\n<p>\u666e\u901a\u865a\u51fd\u6570\uff1a\u76ee\u7684\u662f\u8ba9\u6d3e\u751f\u7c7b\u7ee7\u627f\u51fd\u6570\u63a5\u53e3\u548c\u9ed8\u8ba4\u5b9e\u73b0\u3002\u4f46\u95ee\u9898\u662f\uff0c\u5982\u679c\u5b50\u7c7b\u4e0d\u5b9e\u73b0\uff0c\u4e5f\u4e0d\u4f1a\u62a5\u9519\uff0c\u5c31\u7528\u4e86\u9ed8\u8ba4\u5b9e\u73b0\u3002\u8fd9\u5c31\u6709\u53ef\u80fd\u5bfc\u81f4\u51fa\u73b0\u95ee\u9898\u3002<\/p>\n\n\n\n<p>\u89e3\u51b3\u65b9\u6cd5\uff1a<\/p>\n\n\n\n<p>1. <strong>\u5207\u65ad\u865a\u51fd\u6570\u63a5\u53e3\u4e0e\u5176\u9ed8\u8ba4\u5b9e\u73b0\u7684\u8fde\u63a5<\/strong>\u3002\u5373\u6d3e\u751f\u7c7b\u9700\u8981\u81ea\u5df1\u4e3b\u52a8\u7684\u53bb\u8c03\u7528\u9ed8\u8ba4\u5b9e\u73b0\uff0c\u800c\u4e0d\u662f\u4e3b\u52a8\u63d0\u4f9b\u7ed9\u4ed6\u4eec\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Airplane{ \npublic:\n    virtual void fly(const Airport&amp; destination) = 0;\nprotected:\n    void defaultFly(const Airport&amp; destination){\n        ...   \/\/ \u9ed8\u8ba4\u4ee3\u7801\u5b9e\u73b0\n    }\n}\n\nclass ModelA : public Airplane {\npublic:\n    virtutal void fly(const Airport&amp; destination)\n    {\n        defaultFly(destination); \/\/\u5982\u679c\u8981\u7528\u9ed8\u8ba4\u5b9e\u73b0\uff0c\u660e\u786e\u7684\u8c03\u7528\n    }\n}\nclass ModelB : public Airplane {\npublic:\n    virtutal void fly(const Airport&amp; destination)\n    {\n        ... \/\/ \u4e0d\u7528\u9ed8\u8ba4\u5b9e\u73b0\uff0c\u81ea\u5df1\u7684\u5b9e\u73b0\u3002\u540c\u65f6\u5982\u679c\u4e0d\u5199fly\u7f16\u8bd1\u5c31\u4f1a\u62a5\u9519\uff0c\u4fdd\u8bc1\u4e86\u6b63\u786e\u6027\u3002\n    }\n}<\/code><\/pre>\n\n\n\n<p>2. <strong>\u5229\u7528\u7eaf\u865a\u51fd\u6570\u548c\u5176\u9ed8\u8ba4\u5b9e\u73b0<\/strong>\u3002\u7eaf\u865a\u51fd\u6570\u5fc5\u987b\u8981\u8ba9\u5b50\u7c7b\u53bb\u5b9e\u73b0\uff0c\u4f46\u4ed6\u81ea\u5df1\u4e5f\u53ef\u4ee5\u5199\u5b9e\u73b0\u3002\u8fd9\u6837\uff0c\u4e5f\u8fbe\u5230\u4e86\u9884\u671f\u7684\u6548\u679c\u4e14\u5c11\u5199\u4e86\u4e00\u4e2a\u51fd\u6570\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Airplane{ \npublic:\n    virtual void fly(const Airport&amp; destination) = 0;\n    ....\n}\nvoid Airplane::fly(const Airport&amp; destination){\n    \/\/ do something\n}\n\nclass ModelA : public Airplane {\npublic:\n    virtutal void fly(const Airport&amp; destination)\n    {\n        Airplane::fly(destination); \/\/ \u5982\u679c\u8981\u7528\u9ed8\u8ba4\u5b9e\u73b0\uff0c\u660e\u786e\u7684\u8c03\u7528\n    }\n}\nclass ModelB : public Airplane {\npublic:\n    virtutal void fly(const Airport&amp; destination)\n    {\n        ... \/\/ \u4e0d\u7528\u9ed8\u8ba4\u5b9e\u73b0\uff0c\u81ea\u5df1\u7684\u5b9e\u73b0\u3002\u540c\u65f6\u5982\u679c\u4e0d\u5199fly\u7f16\u8bd1\u5c31\u4f1a\u62a5\u9519\uff0c\u4fdd\u8bc1\u4e86\u6b63\u786e\u6027\u3002\n    }\n}<\/code><\/pre>\n\n\n\n<p>3. \u975e\u865a\u51fd\u6570\uff1a\u76ee\u7684\u662f\u8ba9\u6d3e\u751f\u7c7b\u5f3a\u5236\u7ee7\u627f\u57fa\u7c7b\u7684\u51fd\u6570\u63a5\u53e3\u548c\u5b9e\u73b0\u3002\u5373\uff0c<strong>\u6d3e\u751f\u7c7b\u4e2d\u4e0d\u5e94\u8be5\u6709\u4e0d\u540c\u7684\u884c\u4e3a<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u8003\u8651\u865a\u51fd\u6570\u4ee5\u5916\u7684\u5176\u4ed6\u9009\u62e9<\/h3>\n\n\n\n<p>\u8fd9\u90e8\u5206\u4e3b\u8981\u662f\u8bb2\u4e86\u51e0\u4e2a\u6bd4\u8f83\u597d\u7684\u8bbe\u8ba1\u6a21\u5f0f<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Non-Virtual Interface<\/h4>\n\n\n\n<p>\u4f7f\u7528\u975e\u865a\u63a5\u53e3\u6765\u5b9e\u73b0\u6a21\u677f\u65b9\u6cd5\u3002<\/p>\n\n\n\n<p>healthValue\u662f\u4e00\u4e2a\u516c\u5171\u975e\u865a\u51fd\u6570\uff0c\u6240\u6709\u7684\u8c03\u7528\u8005\u90fd\u4e0d\u8bb8\u76f4\u63a5\u91cd\u5199\u8fd9\u4e2a\u63a5\u53e3\u3002\u8fd9\u6837\uff0c\u5982\u679c\u6211\u4eec\u9700\u8981\u4fee\u6539\u4e1a\u52a1\u903b\u8f91\uff0c\u5c31\u53ea\u53ef\u4ee5\u901a\u8fc7\u91cd\u5199doHealthValue\u3002\u540c\u65f6\uff0c\u9650\u5236\u4e3aprivate\uff0c\u4e5f\u4fdd\u8bc1\u4e86\u53ea\u6709\u57fa\u7c7b\u53bb\u8c03\u7528\u5b83\uff0c\u5b50\u7c7b\u65e0\u6cd5\u4f7f\u7528\uff08\u65e0\u6cd5\u4f7f\u7528\u57fa\u7c7b\u8fd9\u4e2a\u5b9e\u73b0\uff09\uff0c\u4fdd\u8bc1\u4e86\u5b89\u5168\u6027\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class GameCharacter {\npublic:\n    int healthValue() const {\n        \/\/ \u505a\u4e00\u4e9b\u4e8b\u524d\u51c6\u5907\u5de5\u4f5c\n        int retVel = doHealthValue();\/\/\u505a\u771f\u6b63\u7684\u5de5\u4f5c\n        \/\/\u505a\u4e8b\u540e\u7684\u5de5\u4f5c\n        return retVel;\n    }\nprivate:\n    virtual int doHealthValue() const {\n        \/\/ dosomething\n        int num = 99 * 2;\n        return 1 + 1 + num;\n    }\n};\n\nclass A :public GameCharacter{\n    virtual int doHealthValue() const override {\n        \/\/ do another thing\n    };\n};<\/code><\/pre>\n\n\n\n<p>\u8fd9\u4e2a\u4e00\u822c\u53ef\u4ee5\u5f00\u59cb\u5199\u597d\u5927\u6982\u7684\u4e1a\u52a1\u903b\u8f91\uff0c\u518d\u8fdb\u884c\u540e\u7eed\u7684\u6269\u5c55\u3002\u63d0\u9ad8\u4e86\u4ee3\u7801\u7684\u5b89\u5168\u6027\u548c\u53ef\u7ef4\u62a4\u6027\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u7b56\u7565\u8bbe\u8ba1\u6a21\u5f0f<\/h4>\n\n\n\n<p>\u8fd9\u91cc\u662f\u501f\u7528\u51fd\u6570\u6307\u9488\u5b9e\u73b0\u7684\uff0c\u901a\u8fc7\u4f20\u5165\u4e0d\u540c\u7684\u51fd\u6570\u6307\u9488\uff0c\u5b9e\u73b0\u4e0d\u540c\u7684\u529f\u80fd\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class GameCharacter{\npublic:\n    typedef int (*HealthCalcFunc)(const GameCharacter&amp;);\n    explicit GameCharacter(HealthCalcFunc hcf = defaultHealthCalc): healthFunc(hcf){}\n    int healthValue() const {\n        return healthFunc(*this);\n    }\nprivate :\n    HealthCalcFunc healthFunc; \/\/ \u51fd\u6570\u6307\u9488\n}\n\nclass EvilBadGuy : public GameCharacter {\npublic :\n    explicit EvilBadGuy(HealthCalcFunc hcf = defaultHealthCalc): GameCharacter(hcf){}\n}\n\nint loseHealthQuickly(const GameCharacter &amp;); \/\/ \u5065\u5eb7\u503c\u8ba1\u7b97\u51fd\u65701\nint loseHealthSlowly(const GameCharacter&amp;);   \/\/ \u5065\u5eb7\u503c\u8ba1\u7b97\u51fd\u65702\nEvilBadGuy ebg1(loseHealthQuickly);           \/\/\nEvilBadGuy edg2(loseHealthSlowly);            \/\/ \u4f20\u5165\u4e0d\u540c\u7684\u5065\u5eb7\u503c\u8ba1\u7b97\u51fd\u6570\uff0c\u4ea7\u751f\u4e0d\u540c\u884c\u4e3a<\/code><\/pre>\n\n\n\n<p>\u540c\u65f6\uff0c\u8fd8\u53ef\u4ee5\u6dfb\u52a0\u6210\u5458\u51fd\u6570\u3002\u8fd9\u6837\u5728\u8fd0\u884c\u65f6\u5019\uff0c\u53ef\u4ee5\u91cd\u65b0\u8bbe\u7f6e\u6539\u53d8\u5065\u5eb7\u503c\u8ba1\u7b97\u884c\u4e3a\u3002<\/p>\n\n\n\n<p>\u6ce8\u610f\uff0c\u5982\u679c\u662f\u975e\u6210\u5458\u51fd\u6570\uff0c\u5982\u679c\u9700\u8981\u8bbf\u95eeprivate\u5bf9\u8c61\uff0c\u5219\u9700\u8981\u8bbe\u7f6e\u53cb\u5143\u6216\u8005\u6dfb\u52a0\u63a5\u53e3\uff0c\u4f1a\u7834\u574f\u7c7b\u7684\u5c01\u88c5\u6027\uff0c\u9700\u8981\u7efc\u5408\u8003\u91cf\u4e00\u4e0b\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">std::function\u5b9e\u73b0\u7b56\u7565\u8bbe\u8ba1\u6a21\u5f0f<\/h4>\n\n\n\n<p>\u4f7f\u7528function\uff0c\u5177\u4f53\u548c\u903b\u8f91\u5982\u4e0b\u3002\u53ef\u89c1\u4f7f\u7528\u4e0a\u6ca1\u6709\u4ec0\u4e48\u533a\u522b\uff0c\u4f46\u7075\u6d3b\u6027\u53d8\u5f97\u975e\u5e38\u9ad8\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Gamecharacter;\/\/\u548c\u4ee5\u524d\u4e00\u6837\nint defaultHealthcalc(const Gamecharacter&amp; gc);\/\/ \u548c\u4ee5\u524d\u4e00\u6837\nclass GameCharacter {\npublic:\n    \/\/ \u5b9a\u4e49\u4e86\u4e00\u4e2a\u7c7b\u578b\u522b\u540d HealthCalcFunc\uff0c\u8868\u793a\u4e00\u4e2a\u53ef\u8c03\u7528\u7684\u5b9e\u4f53\uff08\u51fd\u6570\u5bf9\u8c61\u3001\u51fd\u6570\u6307\u9488\u6216 lambda \u8868\u8fbe\u5f0f\u7b49\uff09\uff0c\u5b83\u63a5\u53d7\u4e00\u4e2a const GameCharacter&amp; \u53c2\u6570\u5e76\u8fd4\u56de\u4e00\u4e2a int\u3002\n    \/\/ \u53ef\u4ee5\u5c06\u4efb\u4f55\u7b26\u5408\u7b7e\u540d\u7684\u51fd\u6570\u6216\u51fd\u6570\u5bf9\u8c61\u4f20\u9012\u7ed9 GameCharacter \u7c7b\uff0c\u7528\u4e8e\u52a8\u6001\u5b9a\u5236\u884c\u4e3a\n    typedef std::function&lt;int(const GameCharacter&amp;)&gt; HealthCalcFunc;\n\n    explicit GameCharacter(HealthCalcFunc hcf = defaultHealthCalc): healthFunc(hcf){}\n    int healthValue() const { return healthFunc(*this) ;}\nprivate:\n    HealthCalcFunc healthFunc;\n}<\/code><\/pre>\n\n\n\n<p>\u6211\u4eec\u73b0\u5728\u8c03\u7528\uff0c\u4f20\u5165\u4efb\u4f55\u53ef\u8c03\u7528\u5b9e\u4f53\u90fd\u662f\u53ef\u4ee5\u7684\uff0c\u5177\u4f53\u4f7f\u7528\u6765\u8bf4\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class GameLevel {\npublic:\n    float health(const GameCharacter&amp;) const; \/\/ \u6210\u5458\u51fd\u6570: \u8ba1\u7b97\u5065\u5eb7\u503c\n};\n\nclass EvilBadGuy : public GameCharacter {\/\/ \u4e00\u79cd\u4eba\u7269\u7c7b\u578b };\nclass EyeCandyCharacter : public GameCharacter { \/\/ \u53e6\u4e00\u79cd\u4eba\u7269\u7c7b\u578b};\n\nEvilBadGuy ebg1(calHealth); \/\/\u7b7e\u540d\u51fd\u6570\u8c03\u7528\nEyeCandyCharacter ecc1(HealthCalculator()); \/\/\u53ef\u8fd4\u56de\u5065\u5eb7\u503c\u7684\u51fd\u6570\u5bf9\u8c61\/Lamda\u8868\u8fbe\u5f0f\nGameLevel currentLevel;\n\/\/ \u521b\u5efa\u4e00\u4e2a EvilBadGuy \u5bf9\u8c61\uff0c\u4f7f\u7528 std::bind \u5c06 GameLevel::health \u51fd\u6570\u7ed1\u5b9a\u5230 currentLevel \u5bf9\u8c61\u4e0a\u3002\n\/\/ _1 \u662f\u5360\u4f4d\u7b26\uff0c\u8868\u793a\u7ed1\u5b9a\u7684\u51fd\u6570\u63a5\u53d7\u4e00\u4e2a\u53c2\u6570\uff08\u5373 GameCharacter&amp;\uff09\u3002\nEvilBadGuy ebg2(std::bind(&amp;GameLevel::health, currentLevel, _1)); <\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">\u53e4\u5178\u7b56\u7565\u8bbe\u8ba1\u6a21\u5f0f<\/h4>\n\n\n\n<p>\u4e0b\u9762\u7684EvilBadGuy\u662f\u5177\u4f53\u7684\u5b9e\u73b0\uff0c\u7ee7\u627f\u5173\u7cfb\u3002HealthCalcFunc\u662fGameCharacter\u7684\u5b50\u5bf9\u8c61\u7c7b\u578b\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/www.haruhi.fans\/wp-content\/uploads\/2025\/05\/image-36-1024x303.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"303\" data-original=\"https:\/\/www.haruhi.fans\/wp-content\/uploads\/2025\/05\/image-36-1024x303.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-4009\" style=\"width:626px;height:auto\"  sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/div><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>class GameCharacter; \/\/ \u524d\u7f6e\u58f0\u660e\uff0c\u4fdd\u8bc1\u4e0d\u62a5\u9519\nclass HealthCalcFunc {\npublic:\n    virtual int calc(const GameCharacter&amp; gc) const {\n        \/\/ \u9ed8\u8ba4\u5b9e\u73b0\u6216\u7eaf\u865a\u51fd\u6570\n    }\n    ...\n};\n\nHealthCalcFunc defaultHealthCalc; \/\/ \u524d\u7f6e\u58f0\u660e\uff0c\u4fdd\u8bc1\u4e0d\u62a5\u9519\nclass GameCharacter {\npublic:\n    explicit GameCharacter(HealthCalcFunc* phcf = &amp;defaultHealthCalc)\n        : pHealthCalc(phcf) {}\n\n    int healthValue() const {\n        return pHealthCalc-&gt;calc(*this);\n    }\n\nprivate:\n    HealthCalcFunc* pHealthCalc;\n};<\/code><\/pre>\n\n\n\n<p><code>GameCharacter<\/code>&nbsp;\u8c03\u7528&nbsp;<code>pHealthCalc-&gt;calc(*this)<\/code>\uff0c\u5b9e\u73b0\u52a8\u6001\u884c\u4e3a\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u7edd\u4e0d\u91cd\u65b0\u5b9a\u4e49\u7ee7\u627f\u800c\u6765\u7684\u975e\u865a\u51fd\u6570<\/h3>\n\n\n\n<p>\u50cf\u662f\u5b9a\u4e49\u4e00\u4e2a\u89c4\u8303\u5427\u3002\u56e0\u4e3a\u7ee7\u627f\u4e0b\u6765\u7684\u975e\u865a\u51fd\u6570\uff0c\u5982\u679c\u518d\u5199\u5c31\u4f1a\u8986\u76d6\u4e86\uff0c\u9700\u8981\u663e\u793a\u7684\u6307\u5b9a\u8c03\u7528\u7236\u7c7b\u624d\u53ef\u4ee5\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class B{\npublic:\n    void mf(); \/\/\u9759\u6001\u7ed1\u5b9a\n}\nclass D : public B { ... };\n\nD x;\nB* pB = &amp;x;\npB-&gt;mf(); \/\/\u7236\u7c7b\u7684mf\u51fd\u6570\n\nD *pD = &amp;x;\npD-&gt;mf(); \/\/\u5b50\u7c7b\u7684mf\u51fd\u6570<\/code><\/pre>\n\n\n\n<p>\u6b64\u65f6\uff0c\u4e8c\u8005\u884c\u4e3a\u5c31\u6709\u53ef\u80fd\u4e0d\u4e00\u81f4\u4e86\uff0c\u6240\u4ee5\u6700\u597d\u5c31\u522b\u8fd9\u4e48\u505a\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u4e0d\u8981\u91cd\u65b0\u5b9a\u4e49\u7ee7\u627f\u800c\u6765\u7684\u9ed8\u8ba4\u53c2\u6570<\/h3>\n\n\n\n<p>C++\u7684\u9ed8\u8ba4\u53c2\u6570\u503c\u662f\u9759\u6001\u7ed1\u5b9a\u7684\uff0c\u800c\u865a\u51fd\u6570\u662f\u52a8\u6001\u7ed1\u5b9a\u7684\uff0c\u4e8c\u8005\u4e0d\u4e00\u81f4\u5bb9\u6613\u4ea7\u751f\u95ee\u9898\uff08\u95ee\u5c31\u662fC++\u63d0\u5347\u6548\u7387\u7684\u8bbe\u5b9a\uff09<\/p>\n\n\n\n<p>\u4f8b\u5982\u4e0b\u9762\u8fd9\u4e2a\u4f8b\u5b50\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u8868\u793a\u51e0\u4f55\u5f62\u72b6\u7684\u7c7b\nclass Shape {\npublic:\n    enum ShapeColor { Red, Green, Blue };\n    \/\/ \u6240\u6709\u5f62\u72b6\u90fd\u5fc5\u987b\u63d0\u4f9b\u4e00\u4e2a\u51fd\u6570\u6765\u7ed8\u5236\u81ea\u5df1\n    virtual void draw(ShapeColor color = Red) const = 0;\n};\n\nclass Rectangle : public Shape {\npublic:\n    \/\/ \u6ce8\u610f\u4e0d\u540c\u7684\u9ed8\u8ba4\u53c2\u6570\u503c\n    virtual void draw(ShapeColor color = Green) const;\n};\n\nShape* ps = new Rectangle;\nps-&gt;draw();  \/\/ \u4f1a\u4f7f\u7528 Shape::draw \u7684\u9ed8\u8ba4\u53c2\u6570\uff0c\u5373 Red\uff01<\/code><\/pre>\n\n\n\n<p>\u4ed6\u5b9e\u9645\u4e0a\u9ed8\u8ba4\u7684\u53c2\u6570\u5c31\u662f\u6307\u9488\u7684\u9ed8\u8ba4\u53c2\u6570\uff0c\u548c\u6211\u4eec\u671f\u5f85\u7684\u865a\u51fd\u6570\u540e\u671f\u7ed1\u5b9a\u4e0d\u60f3\u7b26\u3002<\/p>\n\n\n\n<p>\u6b63\u786e\u7684\u505a\u6cd5\u662f\uff1a\u7edf\u4e00\u9ed8\u8ba4\u53c2\u6570\uff0c\u53ea\u5728\u57fa\u7c7b\u5b9a\u4e49\u9ed8\u8ba4\u503c\uff0c\u5176\u5b83\u7ee7\u627f\u7684\u4e0d\u5141\u8bb8<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Shape {\npublic:\n    enum ShapeColor { Red, Green, Blue };\n    virtual void draw(ShapeColor color = Red) const = 0;\n};\n\nclass Rectangle : public Shape {\npublic:\n    virtual void draw(ShapeColor color) const override;\n};<\/code><\/pre>\n\n\n\n<p>\u53e6\u4e00\u79cd\u89e3\u51b3\u65b9\u6cd5\u662f\uff0c\u63d0\u4f9b\u975e\u865a\u62df\u63a5\u53e3<strong>(Non-Virtual Interface, NVI)<\/strong>&nbsp;\u7684\u8bbe\u8ba1\u6a21\u5f0f\uff0c\u8fd9\u6837\u8fd9\u4e2a\u51fd\u6570\u5c31\u4e0d\u4f1a\u88ab\u91cd\u5199\uff08\u6309\u7167\u5148\u524d\u7684\u7ea6\u5b9a\uff09\uff0c\u4fdd\u8bc1\u884c\u4e3a\u4e00\u81f4\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u53e6\u4e00\u79cd\u9009\u62e9\u662f\u975e\u865a\u62df\u63a5\u53e3\u65b9\u6cd5 (NVI)\uff1a\nclass Shape {\npublic:\n    enum ShapeColor { Red, Green, Blue };\n    void draw(ShapeColor color = Red) const  \/\/ \u73b0\u5728\u662f non-virtual\uff0c\u4e0d\u4f1a\u91cd\u5199\n    {\n        doDraw(color);  \/\/ \u8c03\u7528\u4e00\u4e2a virtual \u51fd\u6570\n    }\nprivate:\n    virtual void doDraw(ShapeColor color) const = 0;  \/\/ \u771f\u6b63\u5e72\u6d3b\u7684\u5730\u65b9\n};\n\nclass Rectangle : public Shape {\nprivate:\n    virtual void doDraw(ShapeColor color) const;  \/\/ \u6ce8\u610f\u6ca1\u6709\u9ed8\u8ba4\u503c\n};<\/code><\/pre>\n\n\n\n<p>\u603b\u7ed3\u4e00\u4e0b<\/p>\n\n\n\n<p class=\"has-luminous-vivid-orange-color has-text-color has-link-color wp-elements-1bbdbaa95628c38e2e8c7e0fd042b2e7\">\u6c38\u8fdc\u4e0d\u8981\u91cd\u65b0\u5b9a\u4e49\u7ee7\u627f\u7684\u9ed8\u8ba4\u53c2\u6570\u503c\uff0c\u56e0\u4e3a\u9ed8\u8ba4\u53c2\u6570\u503c\u662f\u9759\u6001\u7ed1\u5b9a\u7684\uff0c\u800c\u865a\u51fd\u6570\u662f\u52a8\u6001\u7ed1\u5b9a\u7684\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u901a\u8fc7<strong>\u590d\u5408<\/strong>\u5b9e\u73b0\u201chas-a\u201d\u6216\u8005\u201c\u6839\u636e\u67d0\u7269\u5b9e\u73b0\u51fa\u201d<\/h3>\n\n\n\n<p>\u590d\u5408\u8868\u793a\u7684\u662f has-a \u6216 \u4e00\u4e2a\u5b9e\u73b0\u5de5\u5177<\/p>\n\n\n\n<p>\u5148\u89e3\u91ca\u4e0b\u590d\u5408\uff0c\u590d\u5408\u7b97\u662f\u8bbe\u8ba1\u6a21\u5f0f\u4e2d\u7684\u4e1c\u897f\uff0c\u5305\u62ec\u4e24\u79cd<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u805a\u5408\uff08aggregation\uff09\uff1a\u5f31\u7684\u5305\u542b\u5173\u7cfb<\/strong>\u3002<\/li>\n\n\n\n<li><strong>\u7ec4\u5408\uff08composition\uff09\uff1a\u5f3a\u7684\u5305\u542b\u5173\u7cfb<\/strong>\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u90a3\u5bf9\u5e94\u5230\u7a0b\u5e8f\u8bbe\u8ba1\u91cc\u9762\uff0c\u5bf9\u5e94\u903b\u8f91\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>&#8220;has-a&#8221;\uff08\u5e94\u7528\u5c42\u9762\uff09<\/strong>\uff1a\n<ul class=\"wp-block-list\">\n<li>\u8868\u793a\u5bf9\u8c61\u4e4b\u95f4\u7684\u903b\u8f91\u5305\u542b\u5173\u7cfb\uff0c\u5982&nbsp;<code>Person<\/code>&nbsp;\u5305\u542b&nbsp;<code>Address<\/code>\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>&#8220;is-implementation-of&#8221;\uff08\u5b9e\u73b0\u5c42\u9762\uff09<\/strong>\uff1a\n<ul class=\"wp-block-list\">\n<li>\u8868\u793a\u901a\u8fc7\u7ec4\u5408\u6765\u5b9e\u73b0\u67d0\u79cd\u529f\u80fd\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>\u5199\u7c7b\u7684\u65f6\u5019\u60f3\u4e00\u4e0b\uff0c\u662f\u6ee1\u8db3is-a\u7684\u516c\u5171\u7ee7\u627f\u8fd8\u662fhas-a\u7684\u7ec4\u5408\uff0c\u518d\u53bb\u5199\u5b9e\u73b0<\/p>\n\n\n\n<p>\u6bd4\u5982\u8bf4\u6211\u60f3\u7528list\u5b9e\u73b0\u4e00\u4e2aset\uff0c\u90a3\u4e48\u6bd4\u8f83\u597d\u7684\u65b9\u5f0f\u5e94\u8be5\u662flist\u4f5c\u4e3a\u4e00\u4e2a\u6210\u5458\u5bf9\u8c61\uff0c\u800c\u975eset\u7ee7\u627flist\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u660e\u667a\u7684\u4f7f\u7528private\u7ee7\u627f<\/h3>\n\n\n\n<p>\u5bf9\u4e8e\u79c1\u6709\u7ee7\u627f\u5e76\u4e0d\u610f\u5473\u7740 is-a \u7684\u5173\u7cfb\uff0c\u800c\u662f <strong>is-implemented-in-terms-of<\/strong> <\/p>\n\n\n\n<p>\u5177\u4f53\u6765\u8bf4\u662f\u4e09\u4e2a\u70b9\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>private\u7ee7\u627f\u4e0d\u610f\u5473\u7740\u201cis-a\u201d\uff0c\u800c\u662f\u201cis-implemented-in-terms-of\u201d\u3002<\/li>\n\n\n\n<li>\u7f16\u8bd1\u5668\u4e0d\u4f1a\u5141\u8bb8\u5c06\u6d3e\u751f\u7c7b\u5bf9\u8c61\u8f6c\u6362\u4e3a\u57fa\u7c7b\u5bf9\u8c61\u3002<\/li>\n\n\n\n<li>\u5c3d\u91cf\u4f7f\u7528\u7ec4\u5408\u6765\u590d\u7528\u529f\u80fd\uff0c\u53ea\u6709\u5728\u5fc5\u8981\u65f6\u624d\u4f7f\u7528private\u7ee7\u627f\u3002\n<ul class=\"wp-block-list\">\n<li>\u56e0\u4e3a\u5927\u591a\u6570\u65f6\u5019\u90fd\u6709\u66ff\u4ee3\u65b9\u6848\u3002\u5f53\u7ee7\u627f\u7c7b\u9700\u8981\u8bbf\u95ee\u53d7\u4fdd\u62a4\u7684\u57fa\u7c7b\u6210\u5458\uff0c\u6216\u8005\u9700\u8981\u91cd\u65b0\u5b9a\u4e49\u7ee7\u627f\u7684\u865a\u51fd\u6570\u65f6\uff0c\u5b83\u662f\u6709\u610f\u4e49\u7684\u3002\n<ul class=\"wp-block-list\">\n<li>\u5982\u679c\u6d3e\u751f\u7c7b\u9700\u8981\u8bbf\u95ee\u57fa\u7c7b\u7684protected\u6210\u5458\uff0c\u5e76\u4e14\u4f60\u53c8\u4e0d\u5e0c\u671b\u5916\u90e8\u4ee3\u7801\u8bbf\u95ee\u8fd9\u4e9b\u6210\u5458\uff0c\u90a3\u4e48\u4f7f\u7528private\u7ee7\u627f\u662f\u5408\u9002\u7684\u9009\u62e9\uff0c\u56e0\u4e3aprivate\u7ee7\u627f\u4f7f\u5f97\u57fa\u7c7b\u7684protected\u6210\u5458\u53d8\u6210\u6d3e\u751f\u7c7b\u7684private\u6210\u5458\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u5728\u6d3e\u751f\u7c7b\u5185\u90e8\u4f7f\u7528\u5b83\u4eec\uff0c\u4f46\u65e0\u6cd5\u66b4\u9732\u7ed9\u5916\u90e8\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u660e\u667a\u800c\u5ba1\u614e\u7684\u4f7f\u7528\u591a\u91cd\u7ee7\u627f<\/h3>\n\n\n\n<p>\u5bf9\u4e8e\u591a\u91cd\u7ee7\u627f\uff0c\u5728java\u4e2d\u662f\u660e\u786e\u6ca1\u6709\uff0c\u4f46\u4e5f\u6ca1\u51fa\u73b0\u4ec0\u4e48\u95ee\u9898\u3002\u6709\u4e9b\u6000\u7591\u5728C++\u4e2d\u7684\u5fc5\u8981\u6027\u4e86\u3002<\/p>\n\n\n\n<p>\u591a\u91cd\u7ee7\u627f\u53ef\u80fd\u4ece\u591a\u4e2a\u57fa\u7c7b\u7ee7\u627f\u5230\u76f8\u540c\u7684\u540d\u79f0\uff0c\u5f88\u53ef\u80fd\u5c31\u9020\u6210\u4e86\u6b67\u4e49\u3002\u6240\u4ee5\u5c31\u9700\u8981\u6307\u5b9a\u7c7b\u540d\u79f0+\u540d\u79f0<\/p>\n\n\n\n<p>\u540c\u65f6\u8fd8\u4f1a\u6709\u7ecf\u5178\u7684\u83f1\u5f62\u7ee7\u627f\u95ee\u9898\uff0c\u9700\u8981\u53bb\u865a\u7ee7\u627f\u89e3\u51b3\u3002\u8ba9\u7f16\u8bd1\u627e\u4e00\u627e\u5f97\u5230\u552f\u4e00\u7684\u5b9e\u73b0\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class File { ... }\nclass InputFile : virtual public File { ... };\nclass OutputFile : virtual public File { ... };\nclass IOFile : public InputFile ,  public OutFile {...}<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><div class='fancybox-wrapper lazyload-container-unload' data-fancybox='post-images' href='https:\/\/www.haruhi.fans\/wp-content\/uploads\/2025\/05\/image-37.png'><img class=\"lazyload lazyload-style-1\" src=\"data:image\/svg+xml;base64,PCEtLUFyZ29uTG9hZGluZy0tPgo8c3ZnIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjZmZmZmZmMDAiPjxnPjwvZz4KPC9zdmc+\"  loading=\"lazy\" decoding=\"async\" width=\"396\" height=\"278\" data-original=\"https:\/\/www.haruhi.fans\/wp-content\/uploads\/2025\/05\/image-37.png\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB\/AAffA0nNPuCLAAAAAElFTkSuQmCC\" alt=\"\" class=\"wp-image-4012\"  sizes=\"auto, (max-width: 396px) 100vw, 396px\" \/><\/div><\/figure>\n\n\n\n<p>\u5bf9\u4e8e\u591a\u91cd\u7ee7\u627f\u7684\u6700\u4f73\u5b9e\u73b0\uff0c<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u6a21\u677f\u4e0e\u6cdb\u578b\u7f16\u7a0b<\/h2>\n\n\n\n<p>\u7f16\u5199\u72ec\u7acb\u4e8e\u6240\u64cd\u4f5c\u5bf9\u8c61\u7c7b\u578b\u7684\u4ee3\u7801<\/p>\n\n\n\n<p>\u4e86\u89e3\u9690\u5f0f\u63a5\u53e3\u4e0e\u7f16\u8bd1<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4f20\u4e16\u7ecf\u5178\uff1aEffective cpp\uff0c\u62dc\u8bfb\u5b66\u4e60 \u672c\u4e66\u76f8\u8f83\u4e8ecpp primer\u90a3\u672c\u4e66\uff0c\u66f4\u591a\u7684\u662f\u4e00\u4e9b\u7406\u5ff5\u4e0a\u7684\u5185\u5bb9 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":3993,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-3796","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-note"],"_links":{"self":[{"href":"https:\/\/www.haruhi.fans\/index.php?rest_route=\/wp\/v2\/posts\/3796","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.haruhi.fans\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.haruhi.fans\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.haruhi.fans\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.haruhi.fans\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3796"}],"version-history":[{"count":83,"href":"https:\/\/www.haruhi.fans\/index.php?rest_route=\/wp\/v2\/posts\/3796\/revisions"}],"predecessor-version":[{"id":4058,"href":"https:\/\/www.haruhi.fans\/index.php?rest_route=\/wp\/v2\/posts\/3796\/revisions\/4058"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.haruhi.fans\/index.php?rest_route=\/wp\/v2\/media\/3993"}],"wp:attachment":[{"href":"https:\/\/www.haruhi.fans\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3796"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.haruhi.fans\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3796"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.haruhi.fans\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3796"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}