Files
hustoj/web/cppreference-zh/chmhelp/cpp-language-member_functions.html
2025-08-01 12:57:54 +08:00

265 lines
31 KiB
HTML

<!DOCTYPE html>
<html lang="zh" dir="ltr" class="client-nojs" xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh">
<head><meta http-equiv="x-ua-compatible" content="ie=edge">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>&#38750;&#38745;&#24577;&#25104;&#21592;&#20989;&#25968;</title>
<link rel="stylesheet" href="ext.css" />
<link rel="stylesheet" href="site_modules.css" />
</head>
<body class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-cpp_language_member_functions skin-cppreference2 action-view cpp-navbar">
<div id="cpp-content-base">
<div id="content"><a id="top"></a>
<h1 id="firstHeading" class="firstHeading">&#38750;&#38745;&#24577;&#25104;&#21592;&#20989;&#25968;</h1>
<div id="bodyContent">
<div id="contentSub"><span class="subpages">&lt; <a href="cpp.html">cpp</a>&lrm; | <a href="cpp-language.html">language</a></span></div>
<div id="mw-content-text" lang="zh" dir="ltr" class="mw-content-ltr" xml:lang="zh">
<p>&#38750;&#38745;&#24577;&#25104;&#21592;&#20989;&#25968;&#26159;&#22312;&#31867;&#30340;<a href="cpp-language-class.html">&#25104;&#21592;&#35828;&#26126;</a>&#20013;&#19981;&#24102; <a href="cpp-language-static.html"><code>static</code></a> &#25110; <a href="cpp-language-friend.html"><code>friend</code></a> &#35828;&#26126;&#31526;&#22768;&#26126;&#30340;&#20989;&#25968;&#12290;&#65288;&#36825;&#20123;&#20851;&#38190;&#35789;&#30340;&#25928;&#26524;&#35265;<a href="cpp-language-static.html#.E9.9D.99.E6.80.81.E6.88.90.E5.91.98.E5.87.BD.E6.95.B0">&#38745;&#24577;&#25104;&#21592;&#20989;&#25968;</a>&#19982;<a href="cpp-language-friend.html">&#21451;&#20803;&#22768;&#26126;</a>&#65289;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">class</span> S <span class="br0">{</span>
<span class="kw4">int</span> mf1<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#38750;&#38745;&#24577;&#25104;&#21592;&#20989;&#25968;&#22768;&#26126;</span>
<span class="kw4">void</span> mf2<span class="br0">(</span><span class="br0">)</span> <span class="kw4">volatile</span>, mf3<span class="br0">(</span><span class="br0">)</span> <span class="sy3">&amp;&amp;</span><span class="sy4">;</span> <span class="co1">// &#21487;&#20197;&#26377; cv &#38480;&#23450;&#25110;&#24341;&#29992;&#38480;&#23450;</span>
<span class="kw4">int</span> mf4<span class="br0">(</span><span class="br0">)</span> <span class="kw4">const</span> <span class="br0">{</span> <span class="kw1">return</span> data<span class="sy4">;</span> <span class="br0">}</span> <span class="co1">// &#21487;&#20197;&#20869;&#32852;&#23450;&#20041;</span>
<span class="kw1">virtual</span> <span class="kw4">void</span> mf5<span class="br0">(</span><span class="br0">)</span> final<span class="sy4">;</span> <span class="co1">// &#21487;&#20197;&#26159;&#34394;&#20989;&#25968;&#65292;&#21487;&#20197;&#20351;&#29992; final/override</span>
S<span class="br0">(</span><span class="br0">)</span> <span class="sy4">:</span> data<span class="br0">(</span><span class="nu0">12</span><span class="br0">)</span> <span class="br0">{</span><span class="br0">}</span> <span class="co1">// &#26500;&#36896;&#20989;&#25968;&#20063;&#26159;&#25104;&#21592;&#20989;&#25968;</span>
<span class="kw4">int</span> data<span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw4">int</span> S<span class="sy4">::</span><span class="me2">mf1</span><span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span> <span class="kw1">return</span> <span class="nu0">7</span><span class="sy4">;</span> <span class="br0">}</span> <span class="co1">// &#19981;&#20869;&#32852;&#23450;&#20041;&#23601;&#24517;&#39035;&#22312;&#21629;&#21517;&#31354;&#38388;&#23450;&#20041;</span></pre></div>
</div>
<p>&#20801;&#35768;&#20219;&#20309;<a href="cpp-language-function.html">&#20989;&#25968;&#22768;&#26126;</a>&#65292;&#22806;&#21152;&#38750;&#38745;&#24577;&#25104;&#21592;&#20989;&#25968;&#19987;&#29992;&#30340;&#35821;&#27861;&#20803;&#32032;&#65306;<a href="cpp-language-abstract_class.html">&#32431;&#35828;&#26126;&#31526;</a>&#65292;cv &#38480;&#23450;&#31526;<span class="t-rev-inl t-since-cxx11"><span>&#65292;&#24341;&#29992;&#38480;&#23450;&#31526;&#65292;<a href="cpp-language-final.html"><code>final</code></a> &#19982; <a href="cpp-language-override.html"><code>override</code></a> &#35828;&#26126;&#31526;</span> <span><span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span></span></span>&#65292;&#20197;&#21450;<a href="cpp-language-initializer_list.html" class="mw-redirect">&#25104;&#21592;&#21021;&#22987;&#21270;&#22120;&#21015;&#34920;</a>&#12290;</p>
<p>&#21487;&#20197;&#29992;&#20197;&#19979;&#26041;&#24335;&#35843;&#29992;&#31867; <code>X</code> &#30340;&#38750;&#38745;&#24577;&#25104;&#21592;&#20989;&#25968;&#65306;</p>
<div class="t-li1"><span class="t-li">1)</span> &#23545; <code>X</code> &#31867;&#22411;&#30340;&#23545;&#35937;&#20351;&#29992;&#31867;&#25104;&#21592;&#35775;&#38382;&#36816;&#31639;&#31526;&#35843;&#29992;</div>
<div class="t-li1"><span class="t-li">2)</span> &#23545;<a href="cpp-language-derived_class.html">&#27966;&#29983;</a>&#33258; <code>X</code> &#30340;&#31867;&#30340;&#23545;&#35937;&#35843;&#29992;</div>
<div class="t-li1"><span class="t-li">3)</span> &#20174; <code>X</code> &#30340;&#25104;&#21592;&#20989;&#25968;&#20307;&#20869;&#30452;&#25509;&#35843;&#29992;</div>
<div class="t-li1"><span class="t-li">4)</span> &#20174;&#27966;&#29983;&#33258; <code>X</code> &#30340;&#31867;&#30340;&#25104;&#21592;&#20989;&#25968;&#20307;&#20869;&#35843;&#29992;&#30452;&#25509;&#35843;&#29992;</div>
<p>&#22312;&#31867;&#22411;&#19981;&#26159; <code>X</code> &#25110;&#27966;&#29983;&#33258; <code>X</code> &#30340;&#23545;&#35937;&#19978;&#35843;&#29992;&#31867; <code>X</code> &#30340;&#38750;&#38745;&#24577;&#25104;&#21592;&#20989;&#25968;&#30340;&#34892;&#20026;&#26410;&#23450;&#20041;&#12290;</p>
<p>&#22312; <code>X</code> &#30340;&#38750;&#38745;&#24577;&#25104;&#21592;&#20989;&#25968;&#30340;&#20307;&#20869;&#65292;&#20219;&#20309;&#35299;&#26512;&#20026; <code>X</code> &#25110; <code>X</code> &#30340;&#26576;&#20010;&#22522;&#31867;&#30340;&#38750;&#31867;&#22411;&#38750;&#38745;&#24577;&#25104;&#21592;&#30340;<a href="cpp-language-expressions.html">&#26631;&#35782;&#34920;&#36798;&#24335;</a> <span class="t-c"><span class="mw-geshi cpp source-cpp">e</span></span>}&#65288;&#20363;&#22914;&#19968;&#20010;&#26631;&#35782;&#31526;&#65289;&#22343;&#34987;&#21464;&#25442;&#20026;&#25104;&#21592;&#35775;&#38382;&#34920;&#36798;&#24335; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="br0">(</span><span class="sy2">*</span>this<span class="br0">)</span>.<span class="me1">e</span></span></span>&#65288;&#38500;&#38750;&#23427;&#24050;&#32463;&#26159;&#25104;&#21592;&#35775;&#38382;&#34920;&#36798;&#24335;&#30340;&#19968;&#37096;&#20998;&#65289;&#12290;&#27169;&#26495;&#23450;&#20041;&#35821;&#22659;&#20013;&#19981;&#20250;&#21457;&#29983;&#36825;&#31181;&#21464;&#25442;&#65292;&#22240;&#27492;&#26377;&#26102;&#38656;&#35201;&#26126;&#30830;&#22320;&#23545;&#26576;&#20010;&#21517;&#23383;&#21069;&#38468; <span class="t-c"><span class="mw-geshi cpp source-cpp">this<span class="sy2">-</span><span class="sy1">&gt;</span></span></span>&#65292;&#20197;&#20351;&#20854;&#25104;&#20026;<a href="cpp-language-dependent_name.html">&#24453;&#20915;&#30340;</a>&#21517;&#23383;&#12290;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">struct</span> S <span class="br0">{</span>
<span class="kw4">int</span> n<span class="sy4">;</span>
<span class="kw4">void</span> f<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw4">void</span> S<span class="sy4">::</span><span class="me2">f</span><span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
n <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span> <span class="co1">// &#21464;&#25442;&#20026; (*this).n = 1;</span>
<span class="br0">}</span>
<span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
S s1, s2<span class="sy4">;</span>
s1.<span class="me1">f</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#26356;&#25913; s1.n</span>
<span class="br0">}</span></pre></div>
</div>
<p>&#22312; <code>X</code> &#30340;&#38750;&#38745;&#24577;&#25104;&#21592;&#20989;&#25968;&#20307;&#20869;&#65292;&#20219;&#20309;&#35299;&#26512;&#21040; <code>X</code> &#25110; <code>X</code> &#30340;&#26576;&#20010;&#22522;&#31867;&#30340;&#38745;&#24577;&#25104;&#21592;&#12289;&#26522;&#20030;&#39033;&#25110;&#23884;&#22871;&#31867;&#22411;&#30340;&#26080;&#38480;&#23450;&#26631;&#35782;&#22343;&#34987;&#21464;&#25442;&#20026;&#23545;&#24212;&#30340;&#26377;&#38480;&#23450;&#26631;&#35782;&#12290;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">struct</span> S <span class="br0">{</span>
<span class="kw4">static</span> <span class="kw4">int</span> n<span class="sy4">;</span>
<span class="kw4">void</span> f<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw4">void</span> S<span class="sy4">::</span><span class="me2">f</span><span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
n <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span> <span class="co1">// &#21464;&#25442;&#20026; S::n = 1;</span>
<span class="br0">}</span>
<span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
S s1, s2<span class="sy4">;</span>
s1.<span class="me1">f</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#26356;&#25913; S::n</span>
<span class="br0">}</span></pre></div>
</div>
<h3><span class="mw-headline" id=".E6.9C.89_const_.E4.B8.8E_volatile_.E9.99.90.E5.AE.9A.E7.9A.84.E6.88.90.E5.91.98.E5.87.BD.E6.95.B0">&#26377; const &#19982; volatile &#38480;&#23450;&#30340;&#25104;&#21592;&#20989;&#25968;</span></h3>
<p>&#38750;&#38745;&#24577;&#25104;&#21592;&#20989;&#25968;&#21487;&#20197;&#24102; const&#12289;volatile &#25110; const volatile &#38480;&#23450;&#31526;&#22768;&#26126;&#65288;&#36825;&#20123;&#38480;&#23450;&#31526;&#20986;&#29616;&#22312;<a href="cpp-language-function.html">&#20989;&#25968;&#22768;&#26126;</a>&#20013;&#30340;&#24418;&#21442;&#21015;&#34920;&#20043;&#21518;&#65289;&#12290;cv &#38480;&#23450;&#24615;&#19981;&#21516;&#30340;&#20989;&#25968;&#20855;&#26377;&#19981;&#21516;&#31867;&#22411;&#65292;&#20174;&#32780;&#21487;&#20197;&#30456;&#20114;&#37325;&#36733;&#12290;</p>
<p>&#22312;&#26377; cv &#38480;&#23450;&#30340;&#20989;&#25968;&#20307;&#20869;&#65292;<span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy2">*</span>this</span></span> &#26377;&#21516;&#26679;&#30340; cv &#38480;&#23450;&#65292;&#20363;&#22914;&#22312; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">const</span></span></span> &#25104;&#21592;&#20989;&#25968;&#20013;&#21482;&#33021;&#27491;&#24120;&#22320;&#35843;&#29992;&#20854;&#20182; const &#25104;&#21592;&#20989;&#25968;&#12290;&#65288;&#22914;&#26524;&#24212;&#29992;&#20102; <a href="cpp-language-const_cast.html"><code>const_cast</code></a>&#65292;&#25110;&#36890;&#36807;&#19981;&#28041;&#21450; <a href="cpp-language-this.html"><code>this</code></a> &#30340;&#35775;&#38382;&#36335;&#24452;&#65292;&#37027;&#20040;&#20173;&#28982;&#21487;&#20197;&#35843;&#29992;&#38750; const &#25104;&#21592;&#20989;&#25968;&#12290;&#65289;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="co2">#include &lt;vector&gt;</span>
<span class="kw1">struct</span> Array <span class="br0">{</span>
<a href="cpp-container-vector.html"><span class="kw1269">std::<span class="me2">vector</span></span></a><span class="sy1">&lt;</span><span class="kw4">int</span><span class="sy1">&gt;</span> data<span class="sy4">;</span>
Array<span class="br0">(</span><span class="kw4">int</span> sz<span class="br0">)</span> <span class="sy4">:</span> data<span class="br0">(</span>sz<span class="br0">)</span> <span class="br0">{</span><span class="br0">}</span>
<span class="co1">// const &#25104;&#21592;&#20989;&#25968;</span>
<span class="kw4">int</span> operator<span class="br0">[</span><span class="br0">]</span><span class="br0">(</span><span class="kw4">int</span> idx<span class="br0">)</span> <span class="kw4">const</span> <span class="br0">{</span>
<span class="co1">// this &#20855;&#26377;&#31867;&#22411; const Array*</span>
<span class="kw1">return</span> data<span class="br0">[</span>idx<span class="br0">]</span><span class="sy4">;</span> <span class="co1">// &#21464;&#25442;&#20026; (*this).data[idx];</span>
<span class="br0">}</span>
<span class="co1">// &#38750; const &#25104;&#21592;&#20989;&#25968;</span>
<span class="kw4">int</span><span class="sy3">&amp;</span> operator<span class="br0">[</span><span class="br0">]</span><span class="br0">(</span><span class="kw4">int</span> idx<span class="br0">)</span> <span class="br0">{</span>
<span class="co1">// this &#20855;&#26377;&#31867;&#22411; Array*</span>
<span class="kw1">return</span> data<span class="br0">[</span>idx<span class="br0">]</span><span class="sy4">;</span> <span class="co1">// &#21464;&#25442;&#20026; (*this).data[idx]</span>
<span class="br0">}</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span>
<span class="br0">{</span>
Array a<span class="br0">(</span><span class="nu0">10</span><span class="br0">)</span><span class="sy4">;</span>
a<span class="br0">[</span><span class="nu0">1</span><span class="br0">]</span> <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span> <span class="co1">// OK&#65306;a[1] &#30340;&#31867;&#22411;&#26159; int&amp;</span>
<span class="kw4">const</span> Array ca<span class="br0">(</span><span class="nu0">10</span><span class="br0">)</span><span class="sy4">;</span>
ca<span class="br0">[</span><span class="nu0">1</span><span class="br0">]</span> <span class="sy1">=</span> <span class="nu0">2</span><span class="sy4">;</span> <span class="co1">// &#38169;&#35823;&#65306;ca[1] &#30340;&#31867;&#22411;&#26159; int</span>
<span class="br0">}</span></pre></div>
</div>
<table class="t-rev-begin">
<tr class="t-rev t-since-cxx11">
<td>
<h3><span class="mw-headline" id=".E6.9C.89.E5.BC.95.E7.94.A8.E9.99.90.E5.AE.9A.E7.9A.84.E6.88.90.E5.91.98.E5.87.BD.E6.95.B0">&#26377;&#24341;&#29992;&#38480;&#23450;&#30340;&#25104;&#21592;&#20989;&#25968;</span></h3>
<p>&#38750;&#38745;&#24577;&#25104;&#21592;&#20989;&#25968;&#21487;&#20197;&#19981;&#24102;&#24341;&#29992;&#38480;&#23450;&#31526;&#65292;&#24102;&#26377;&#24038;&#20540;&#24341;&#29992;&#38480;&#23450;&#31526;&#65288;&#20989;&#25968;&#21517;&#21518;&#30340; <code>&amp;</code> &#35760;&#21495;&#65289;&#65292;&#25110;&#24102;&#26377;&#21491;&#20540;&#24341;&#29992;&#38480;&#23450;&#31526;&#65288;&#20989;&#25968;&#21517;&#21518;&#30340; <code>&amp;&amp;</code> &#35760;&#21495;&#65289;&#22768;&#26126;&#12290;&#22312;<a href="cpp-language-overload_resolution.html">&#37325;&#36733;&#20915;&#35758;</a>&#20013;&#65292;&#25353;&#19979;&#21015;&#26041;&#24335;&#23545;&#24453;&#31867; X &#30340;&#38750;&#38745;&#24577; cv &#38480;&#23450;&#25104;&#21592;&#20989;&#25968;&#65306;</p>
<ul>
<li>&#19981;&#24102;&#24341;&#29992;&#38480;&#23450;&#31526;&#65306;&#38544;&#24335;&#23545;&#35937;&#24418;&#21442;&#20855;&#26377;&#21040; cv &#38480;&#23450;&#30340; X &#30340;&#24038;&#20540;&#24341;&#29992;&#31867;&#22411;&#65292;&#24182;&#39069;&#22806;&#20801;&#35768;&#32465;&#23450;&#21040;&#21491;&#20540;&#38544;&#21547;&#23545;&#35937;&#23454;&#21442;</li>
<li>&#24038;&#20540;&#24341;&#29992;&#38480;&#23450;&#31526;&#65306;&#38544;&#24335;&#23545;&#35937;&#24418;&#21442;&#20855;&#26377;&#21040; cv &#38480;&#23450;&#30340; X &#30340;&#24038;&#20540;&#24341;&#29992;&#31867;&#22411;</li>
<li>&#21491;&#20540;&#24341;&#29992;&#38480;&#23450;&#31526;&#65306;&#38544;&#24335;&#23545;&#35937;&#24418;&#21442;&#20855;&#26377;&#21040; cv &#38480;&#23450;&#30340; X &#30340;&#21491;&#20540;&#24341;&#29992;&#31867;&#22411;</li>
</ul>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="co2">#include &lt;iostream&gt;</span>
<span class="kw1">struct</span> S <span class="br0">{</span>
<span class="kw4">void</span> f<span class="br0">(</span><span class="br0">)</span> <span class="sy3">&amp;</span> <span class="br0">{</span> <a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;&#24038;&#20540;<span class="es1">\n</span>&quot;</span><span class="sy4">;</span> <span class="br0">}</span>
<span class="kw4">void</span> f<span class="br0">(</span><span class="br0">)</span> <span class="sy3">&amp;&amp;</span><span class="br0">{</span> <a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;&#21491;&#20540;<span class="es1">\n</span>&quot;</span><span class="sy4">;</span> <span class="br0">}</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span><span class="br0">{</span>
S s<span class="sy4">;</span>
s.<span class="me1">f</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#25171;&#21360;&ldquo;&#24038;&#20540;&rdquo;</span>
std<span class="sy4">::</span><span class="me2">move</span><span class="br0">(</span>s<span class="br0">)</span>.<span class="me1">f</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#25171;&#21360;&ldquo;&#21491;&#20540;&rdquo;</span>
S<span class="br0">(</span><span class="br0">)</span>.<span class="me1">f</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#25171;&#21360;&ldquo;&#21491;&#20540;&rdquo;</span>
<span class="br0">}</span></pre></div>
</div>
<p>&#27880;&#24847;&#65306;&#19982; cv &#38480;&#23450;&#24615;&#19981;&#21516;&#65292;&#24341;&#29992;&#38480;&#23450;&#24615;&#19981;&#25913;&#21464; <a href="cpp-language-this.html"><code>this</code></a> &#25351;&#38024;&#30340;&#24615;&#36136;&#65306;&#21363;&#20351;&#22312;&#21491;&#20540;&#24341;&#29992;&#38480;&#23450;&#30340;&#20989;&#25968;&#20013;&#65292;<span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy2">*</span>this</span></span> &#20173;&#26159;&#24038;&#20540;&#34920;&#36798;&#24335;&#12290;</p>
</td>
<td><span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span></td>
</tr>
</table>
<h3><span class="mw-headline" id=".E8.99.9A.E5.87.BD.E6.95.B0.E5.92.8C.E7.BA.AF.E8.99.9A.E5.87.BD.E6.95.B0">&#34394;&#20989;&#25968;&#21644;&#32431;&#34394;&#20989;&#25968;</span></h3>
<p>&#38750;&#38745;&#24577;&#25104;&#21592;&#20989;&#25968;&#21487;&#20197;&#22768;&#26126;&#20026;<i>&#34394;</i>&#25110;<i>&#32431;&#34394;</i>&#20989;&#25968;&#12290;&#32454;&#33410;&#35265;<a href="cpp-language-virtual.html">&#34394;&#20989;&#25968;</a>&#19982;<a href="cpp-language-abstract_class.html">&#25277;&#35937;&#31867;</a>&#12290;</p>
<h3><span class="mw-headline" id=".E7.89.B9.E6.AE.8A.E6.88.90.E5.91.98.E5.87.BD.E6.95.B0">&#29305;&#27530;&#25104;&#21592;&#20989;&#25968;</span></h3>
<p><a href="cpp-language-constructor.html">&#26500;&#36896;&#20989;&#25968;</a>&#21644;<a href="cpp-language-destructor.html">&#26512;&#26500;&#20989;&#25968;</a>&#26159;&#38750;&#38745;&#24577;&#25104;&#21592;&#20989;&#25968;&#65292;&#22312;&#20854;&#22768;&#26126;&#20013;&#20351;&#29992;&#29305;&#27530;&#30340;&#35821;&#27861;&#65288;&#32454;&#33410;&#35265;&#20854;&#30456;&#24212;&#39029;&#38754;&#65289;&#12290;</p>
<p>&#19968;&#20123;&#25104;&#21592;&#20989;&#25968;&#26159;<i>&#29305;&#27530;</i>&#30340;&#65306;&#22312;&#26576;&#20123;&#29615;&#22659;&#19979;&#65292;&#21363;&#20351;&#29992;&#25143;&#19981;&#23450;&#20041;&#32534;&#35793;&#22120;&#20063;&#20250;&#23450;&#20041;&#23427;&#20204;&#12290;&#23427;&#20204;&#26159;&#65306;</p>
<ul>
<li><a href="cpp-language-default_constructor.html">&#40664;&#35748;&#26500;&#36896;&#20989;&#25968;</a></li>
<li><a href="cpp-language-copy_constructor.html">&#22797;&#21046;&#26500;&#36896;&#20989;&#25968;</a></li>
</ul>
<table class="t-rev-begin">
<tr class="t-rev t-since-cxx11">
<td>
<ul>
<li><a href="cpp-language-move_constructor.html">&#31227;&#21160;&#26500;&#36896;&#20989;&#25968;</a></li>
</ul>
</td>
<td><span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span></td>
</tr>
</table>
<ul>
<li><a href="cpp-language-copy_assignment.html">&#22797;&#21046;&#36171;&#20540;&#36816;&#31639;&#31526;</a></li>
</ul>
<table class="t-rev-begin">
<tr class="t-rev t-since-cxx11">
<td>
<ul>
<li><a href="cpp-language-move_assignment.html">&#31227;&#21160;&#36171;&#20540;&#36816;&#31639;&#31526;</a></li>
</ul>
</td>
<td><span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span></td>
</tr>
</table>
<ul>
<li>
<table class="t-rev-begin">
<tr class="t-rev t-until-cxx20">
<td>
<p><a href="cpp-language-destructor.html">&#26512;&#26500;&#20989;&#25968;</a></p>
</td>
<td><span class="t-mark-rev t-until-cxx20">(C++20 &#21069;)</span></td>
</tr>
<tr class="t-rev t-since-cxx20">
<td>
<p><a href="cpp-language-destructor.html#.E9.A2.84.E6.9C.9F.E7.9A.84.E6.9E.90.E6.9E.84.E5.87.BD.E6.95.B0">&#39044;&#26399;&#30340;&#26512;&#26500;&#20989;&#25968;</a></p>
</td>
<td><span class="t-mark-rev t-since-cxx20">(C++20 &#36215;)</span></td>
</tr>
</table>
<p>&#29305;&#27530;&#25104;&#21592;&#20989;&#25968;<span class="t-rev-inl t-since-cxx20"><span>&#20197;&#21450;<a href="cpp-language-default_comparisons.html">&#27604;&#36739;&#36816;&#31639;&#31526;</a></span> <span><span class="t-mark-rev t-since-cxx20">(C++20 &#36215;)</span></span></span>&#26159;&#20165;&#26377;&#30340;&#33021;&#34987;<i>&#39044;&#32622;</i>&#30340;&#20989;&#25968;&#65292;&#21363;&#20351;&#29992; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy1">=</span> <span class="kw1">default</span></span></span> &#26367;&#20195;&#20989;&#25968;&#20307;&#36827;&#34892;&#23450;&#20041;&#65288;&#32454;&#33410;&#35265;&#20854;&#30456;&#24212;&#39029;&#38754;&#65289;&#12290;</p>
<h3><span class="mw-headline" id=".E7.A4.BA.E4.BE.8B">&#31034;&#20363;</span></h3>
<div class="t-example">
<div class="t-example-live-link"></div>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="co2">#include &lt;iostream&gt;</span>
<span class="co2">#include &lt;string&gt;</span>
<span class="co2">#include &lt;utility&gt;</span>
<span class="co2">#include &lt;exception&gt;</span>
<span class="kw1">struct</span> S <span class="br0">{</span>
<span class="kw4">int</span> data<span class="sy4">;</span>
<span class="co1">// &#31616;&#21333;&#30340;&#36716;&#25442;&#26500;&#36896;&#20989;&#25968;&#65288;&#22768;&#26126;&#65289;</span>
S<span class="br0">(</span><span class="kw4">int</span> val<span class="br0">)</span><span class="sy4">;</span>
<span class="co1">// &#31616;&#21333;&#30340;&#26174;&#24335;&#26500;&#36896;&#20989;&#25968;&#65288;&#22768;&#26126;&#65289;</span>
<span class="kw1">explicit</span> S<span class="br0">(</span><a href="cpp-string-basic_string.html"><span class="kw1230">std::<span class="me2">string</span></span></a> str<span class="br0">)</span><span class="sy4">;</span>
<span class="co1">// const &#25104;&#21592;&#20989;&#25968;&#65288;&#23450;&#20041;&#65289;</span>
<span class="kw1">virtual</span> <span class="kw4">int</span> getData<span class="br0">(</span><span class="br0">)</span> <span class="kw4">const</span> <span class="br0">{</span> <span class="kw1">return</span> data<span class="sy4">;</span> <span class="br0">}</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="co1">// &#26500;&#36896;&#20989;&#25968;&#30340;&#23450;&#20041;</span>
S<span class="sy4">::</span><span class="me2">S</span><span class="br0">(</span><span class="kw4">int</span> val<span class="br0">)</span> <span class="sy4">:</span> data<span class="br0">(</span>val<span class="br0">)</span> <span class="br0">{</span>
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;&#35843;&#29992;&#26500;&#36896;&#20989;&#25968;1&#65292;data = &quot;</span> <span class="sy1">&lt;&lt;</span> data <span class="sy1">&lt;&lt;</span> <span class="st0">&#39;<span class="es1">\n</span>&#39;</span><span class="sy4">;</span>
<span class="br0">}</span>
<span class="co1">// &#27492;&#26500;&#36896;&#20989;&#25968;&#25317;&#26377; catch &#23376;&#21477;</span>
S<span class="sy4">::</span><span class="me2">S</span><span class="br0">(</span><a href="cpp-string-basic_string.html"><span class="kw1230">std::<span class="me2">string</span></span></a> str<span class="br0">)</span> <span class="kw1">try</span> <span class="sy4">:</span> data<span class="br0">(</span><a href="cpp-string-basic_string-stol.html"><span class="kw1257">std::<span class="me2">stoi</span></span></a><span class="br0">(</span>str<span class="br0">)</span><span class="br0">)</span> <span class="br0">{</span>
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;&#35843;&#29992;&#26500;&#36896;&#20989;&#25968;2&#65292;data = &quot;</span> <span class="sy1">&lt;&lt;</span> data <span class="sy1">&lt;&lt;</span> <span class="st0">&#39;<span class="es1">\n</span>&#39;</span><span class="sy4">;</span>
<span class="br0">}</span> <span class="kw1">catch</span><span class="br0">(</span><span class="kw4">const</span> <a href="cpp-error-exception.html"><span class="kw764">std::<span class="me2">exception</span></span></a><span class="sy3">&amp;</span><span class="br0">)</span> <span class="br0">{</span>
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;&#26500;&#36896;&#20989;&#25968;2&#22833;&#36133;&#65292;&#23383;&#31526;&#20018;&#39;&quot;</span> <span class="sy1">&lt;&lt;</span> str <span class="sy1">&lt;&lt;</span> <span class="st0">&quot;&#39;<span class="es1">\n</span>&quot;</span><span class="sy4">;</span>
<span class="kw1">throw</span><span class="sy4">;</span> <span class="co1">// &#26500;&#36896;&#20989;&#25968;&#30340; catch &#23376;&#21477;&#24212;&#35813;&#22987;&#32456;&#20877;&#25243;&#20986;&#24322;&#24120;</span>
<span class="br0">}</span>
<span class="kw1">struct</span> D <span class="sy4">:</span> S <span class="br0">{</span>
<span class="kw4">int</span> data2<span class="sy4">;</span>
<span class="co1">// &#24102;&#40664;&#35748;&#23454;&#21442;&#30340;&#26500;&#36896;&#20989;&#25968;</span>
D<span class="br0">(</span><span class="kw4">int</span> v1, <span class="kw4">int</span> v2 <span class="sy1">=</span> <span class="nu0">11</span><span class="br0">)</span> <span class="sy4">:</span> S<span class="br0">(</span>v1<span class="br0">)</span>, data2<span class="br0">(</span>v2<span class="br0">)</span> <span class="br0">{</span><span class="br0">}</span>
<span class="co1">// &#34394;&#25104;&#21592;&#20989;&#25968;</span>
<span class="kw4">int</span> getData<span class="br0">(</span><span class="br0">)</span> <span class="kw4">const</span> override <span class="br0">{</span> <span class="kw1">return</span> data<span class="sy2">*</span>data2<span class="sy4">;</span> <span class="br0">}</span>
<span class="co1">// &#24038;&#20540;&#38480;&#23450;&#30340;&#36171;&#20540;&#36816;&#31639;&#31526;</span>
D<span class="sy3">&amp;</span> operator<span class="sy1">=</span><span class="br0">(</span>D other<span class="br0">)</span> <span class="sy3">&amp;</span> <span class="br0">{</span>
<a href="cpp-algorithm-swap.html"><span class="kw1599">std::<span class="me2">swap</span></span></a><span class="br0">(</span>other.<span class="me1">data</span>, data<span class="br0">)</span><span class="sy4">;</span>
<a href="cpp-algorithm-swap.html"><span class="kw1599">std::<span class="me2">swap</span></span></a><span class="br0">(</span>other.<span class="me1">data2</span>, data2<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">return</span> <span class="sy2">*</span>this<span class="sy4">;</span>
<span class="br0">}</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span>
<span class="br0">{</span>
D d1 <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span>
S s2<span class="br0">(</span><span class="st0">&quot;2&quot;</span><span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">try</span> <span class="br0">{</span>
S s3<span class="br0">(</span><span class="st0">&quot;&#19981;&#26159;&#25968;&#23383;&quot;</span><span class="br0">)</span><span class="sy4">;</span>
<span class="br0">}</span> <span class="kw1">catch</span><span class="br0">(</span><span class="kw4">const</span> <a href="cpp-error-exception.html"><span class="kw764">std::<span class="me2">exception</span></span></a><span class="sy3">&amp;</span><span class="br0">)</span> <span class="br0">{</span><span class="br0">}</span>
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1">&lt;&lt;</span> s2.<span class="me1">getData</span><span class="br0">(</span><span class="br0">)</span> <span class="sy1">&lt;&lt;</span> <span class="st0">&#39;<span class="es1">\n</span>&#39;</span><span class="sy4">;</span>
D d2<span class="br0">(</span><span class="nu0">3</span>, <span class="nu0">4</span><span class="br0">)</span><span class="sy4">;</span>
d2 <span class="sy1">=</span> d1<span class="sy4">;</span> <span class="co1">// OK &#65306;&#36171;&#20540;&#32473;&#24038;&#20540;</span>
<span class="co1">// D(5) = d1; // &#38169;&#35823;&#65306;&#27809;&#26377;&#36866;&#21512;&#30340; operator= &#37325;&#36733;</span>
<span class="br0">}</span></pre></div>
</div>
<p>&#36755;&#20986;&#65306;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="text source-text">
<pre class="de1">&#35843;&#29992;&#26500;&#36896;&#20989;&#25968;1&#65292;data = 1
&#35843;&#29992;&#26500;&#36896;&#20989;&#25968;2&#65292;data = 2
&#26500;&#36896;&#20989;&#25968;2&#22833;&#36133;&#65292;&#23383;&#31526;&#20018;&#39;&#19981;&#26159;&#25968;&#23383;&#39;
2
&#35843;&#29992;&#26500;&#36896;&#20989;&#25968;1&#65292;data = 3</pre></div>
</div>
</div>
<h3><span class="mw-headline" id=".E5.8F.82.E9.98.85">&#21442;&#38405;</span></h3>
<ul>
<li><a href="cpp-language-classes.html">&#31867;</a></li>
<li><a href="cpp-language-data_members.html">&#25968;&#25454;&#25104;&#21592;</a></li>
<li><a href="cpp-language-static.html">&#38745;&#24577;&#25968;&#25454;&#25104;&#21592;</a></li>
</ul>
</li>
</ul>
</div>
<div class="visualClear"></div>
</div>
</div>
</div>
</body>
</html>