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

340 lines
33 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>&#31867;&#22768;&#26126;</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_class skin-cppreference2 action-view cpp-navbar">
<div id="cpp-content-base">
<div id="content"><a id="top"></a>
<h1 id="firstHeading" class="firstHeading">&#31867;&#22768;&#26126;</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>&#31867;&#65288;class&#65289;&#19982;&#32467;&#26500;&#20307;&#65288;struct&#65289;&#26159;&#29992;&#25143;&#23450;&#20041;&#31867;&#22411;&#65292;&#20197; <span class="t-spar">&#31867;&#35828;&#26126;&#31526;</span> &#23450;&#20041;&#65292;&#23427;&#22312;<a href="cpp-language-declarations.html">&#22768;&#26126;</a>&#35821;&#27861;&#30340; <span class="t-spar">&#22768;&#26126;&#35828;&#26126;&#31526;&#24207;&#21015;</span> &#20013;&#20986;&#29616;&#12290;&#31867;&#35828;&#26126;&#31526;&#25317;&#26377;&#19979;&#21015;&#35821;&#27861;&#65306;</p>
<table class="t-sdsc-begin">
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
<tr class="t-sdsc">
<td class="t-sdsc-nopad"><span class="t-spar">&#31867;&#20851;&#38190;&#35789;</span> <span class="t-spar">&#23646;&#24615;</span> <span class="t-spar">&#31867;&#22836;&#21517;</span> <span class="t-spar">&#22522;&#31867;&#23376;&#21477;</span> <code><b>{</b></code> <span class="t-spar">&#25104;&#21592;&#35828;&#26126;</span> <code><b>}</b></code></td>
<td class="t-sdsc-nopad"></td>
<td class="t-sdsc-nopad"></td>
</tr>
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
</table>
<table class="t-par-begin">
<tr class="t-par">
<td><span class="t-spar">&#31867;&#20851;&#38190;&#35789;</span></td>
<td>-</td>
<td><a href="cpp-keyword-class.html"><tt>class</tt></a> &#25110; <a href="cpp-keyword-struct.html"><tt>struct</tt></a> &#20043;&#19968;&#12290;&#38500;&#20102;&#40664;&#35748;<a href="cpp-language-access.html">&#25104;&#21592;&#35775;&#38382;</a>&#21644;&#40664;&#35748;<a href="cpp-language-derived_class.html">&#22522;&#31867;&#35775;&#38382;</a>&#20043;&#22806;&#65292;&#20004;&#20010;&#20851;&#38190;&#35789;&#26159;&#31561;&#21516;&#30340;&#12290;</td>
</tr>
<tr class="t-par">
<td><span class="t-spar">&#23646;&#24615;</span></td>
<td>-</td>
<td><span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span> &#21487;&#36873;&#30340;&#20219;&#20219;&#24847;&#25968;&#37327;<a href="cpp-language-attributes.html">&#23646;&#24615;</a>&#24207;&#21015;&#65292;&#21487;&#20197;&#21253;&#21547; <a href="cpp-language-alignas.html">alignas &#25351;&#23450;&#31526;</a></td>
</tr>
<tr class="t-par">
<td><span class="t-spar">&#31867;&#22836;&#21517;</span></td>
<td>-</td>
<td>&#25152;&#23450;&#20041;&#30340;&#31867;&#30340;&#21517;&#23383;&#12290;&#21487;&#20197;<a href="cpp-language-identifiers.html#.E6.9C.89.E9.99.90.E5.AE.9A.E7.9A.84.E6.A0.87.E8.AF.86.E7.AC.A6">&#26377;&#38480;&#23450;</a>&#65292;&#20063;&#21487;&#20197;&#21518;&#38543;&#20851;&#38190;&#35789; <a href="cpp-keyword-final.html">final</a>&#12290;&#21517;&#23383;&#21487;&#20197;&#30465;&#30053;&#65292;&#27492;&#26102;&#31867;&#26159;&#26080;&#21517;&#30340;&#65288;&#27880;&#24847;&#26080;&#21517;&#31867;&#19981;&#33021;&#26159; <a href="cpp-language-final.html">final</a> &#30340;&#65289;</td>
</tr>
<tr class="t-par">
<td><span class="t-spar">&#22522;&#31867;&#23376;&#21477;</span></td>
<td>-</td>
<td>&#19968;&#25110;&#22810;&#20010;&#22522;&#31867;&#20197;&#21450;&#21508;&#33258;&#25152;&#29992;&#30340;&#32487;&#25215;&#27169;&#22411;&#30340;&#21487;&#36873;&#21015;&#34920;&#65288;&#35265;<a href="cpp-language-derived_class.html">&#27966;&#29983;&#31867;</a>&#65289;</td>
</tr>
<tr class="t-par">
<td><span class="t-spar">&#25104;&#21592;&#35828;&#26126;</span></td>
<td>-</td>
<td>&#35775;&#38382;&#35828;&#26126;&#31526;&#12289;&#25104;&#21592;&#23545;&#35937;&#21450;&#25104;&#21592;&#20989;&#25968;&#30340;&#22768;&#26126;&#21644;&#23450;&#20041;&#30340;&#21015;&#34920;&#65288;&#35265;&#19979;&#25991;&#65289;</td>
</tr>
</table>
<p>&#35821;&#27861;&#32508;&#36848;&#35265;<a href="cpp-language-classes.html">&#31867;</a>&#12290;&#22914;&#26524; <span class="t-spar">&#31867;&#20851;&#38190;&#35789;</span> &#26159; <a href="cpp-keyword-union.html"><tt>union</tt></a>&#65292;&#37027;&#20040;&#22768;&#26126;&#24341;&#20837;&#19968;&#20010;<a href="cpp-language-union.html">&#32852;&#21512;&#20307;&#31867;&#22411;</a>&#12290;</p>
<h3><span class="mw-headline" id=".E5.89.8D.E7.BD.AE.E5.A3.B0.E6.98.8E">&#21069;&#32622;&#22768;&#26126;</span></h3>
<p>&#19979;&#21015;&#24418;&#24335;&#30340;&#22768;&#26126;</p>
<table class="t-sdsc-begin">
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
<tr class="t-sdsc">
<td class="t-sdsc-nopad"><span class="t-spar">&#31867;&#20851;&#38190;&#35789;</span> <span class="t-spar">&#23646;&#24615;</span> <span class="t-spar">&#26631;&#35782;&#31526;</span> <code><b>;</b></code></td>
<td class="t-sdsc-nopad"></td>
<td class="t-sdsc-nopad"></td>
</tr>
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
</table>
<p>&#22768;&#26126;&#19968;&#20010;&#23558;&#31245;&#21518;&#22312;&#27492;&#20316;&#29992;&#22495;&#23450;&#20041;&#30340;&#31867;&#31867;&#22411;&#12290;&#30452;&#21040;&#23450;&#20041;&#20986;&#29616;&#21069;&#65292;&#27492;&#31867;&#21517;&#20855;&#26377;<a href="cpp-language-type.html#.E4.B8.8D.E5.AE.8C.E6.95.B4.E7.B1.BB.E5.9E.8B">&#19981;&#23436;&#25972;&#31867;&#22411;</a>&#12290;&#36825;&#20801;&#35768;&#31867;&#20043;&#38388;&#24444;&#27492;&#24341;&#29992;&#65306;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">class</span> Vector<span class="sy4">;</span> <span class="co1">// &#21069;&#32622;&#22768;&#26126;</span>
<span class="kw1">class</span> Matrix <span class="br0">{</span>
<span class="co1">// ...</span>
<span class="kw1">friend</span> Vector operator<span class="sy2">*</span><span class="br0">(</span><span class="kw4">const</span> Matrix<span class="sy3">&amp;</span>, <span class="kw4">const</span> Vector<span class="sy3">&amp;</span><span class="br0">)</span><span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">class</span> Vector <span class="br0">{</span>
<span class="co1">// ...</span>
<span class="kw1">friend</span> Vector operator<span class="sy2">*</span><span class="br0">(</span><span class="kw4">const</span> Matrix<span class="sy3">&amp;</span>, <span class="kw4">const</span> Vector<span class="sy3">&amp;</span><span class="br0">)</span><span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span></pre></div>
</div>
<p>&#32780;&#19988;&#22914;&#26524;&#29305;&#23450;&#30340;&#28304;&#25991;&#20214;&#21482;&#29992;&#21040;&#35813;&#31867;&#30340;&#25351;&#38024;&#21644;&#24341;&#29992;&#65292;&#20351;&#29992;&#21069;&#32622;&#22768;&#26126;&#20063;&#21487;&#20197;&#20943;&#23569; #include &#20381;&#36182;&#65306;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="co1">// &#22312; MyStruct.h &#20013;</span>
<span class="co2">#include &lt;iosfwd&gt; // &#21547;&#26377; std::ostream &#30340;&#21069;&#32622;&#22768;&#26126;</span>
<span class="kw1">struct</span> MyStruct <span class="br0">{</span>
<span class="kw4">int</span> value<span class="sy4">;</span>
<span class="kw1">friend</span> <a href="cpp-io-basic_ostream.html"><span class="kw1729">std::<span class="me2">ostream</span></span></a><span class="sy3">&amp;</span> operator<span class="sy1">&lt;&lt;</span><span class="br0">(</span><a href="cpp-io-basic_ostream.html"><span class="kw1729">std::<span class="me2">ostream</span></span></a><span class="sy3">&amp;</span> os, <span class="kw4">const</span> S<span class="sy3">&amp;</span> s<span class="br0">)</span><span class="sy4">;</span>
<span class="co1">// &#20854;&#23450;&#20041;&#22312; MyStruct.cpp &#25991;&#20214;&#20013;&#25552;&#20379;&#65292;&#35813;&#25991;&#20214;&#20351;&#29992; #include &lt;ostream&gt;</span>
<span class="br0">}</span><span class="sy4">;</span></pre></div>
</div>
<p>&#22914;&#26524;&#21069;&#32622;&#22768;&#26126;&#22312;&#23616;&#37096;&#20316;&#29992;&#22495;&#20986;&#29616;&#65292;&#37027;&#20040;&#23427;&#20250;<i>&#38544;&#34255;</i>&#23427;&#30340;&#22806;&#22260;&#20316;&#29992;&#22495;&#20013;&#21487;&#33021;&#20986;&#29616;&#30340;&#20808;&#21069;&#22768;&#26126;&#30340;&#30456;&#21516;&#21517;&#23383;&#30340;&#31867;&#12289;&#21464;&#37327;&#12289;&#20989;&#25968;&#65292;&#20197;&#21450;&#25152;&#26377;&#20854;&#20182;&#22768;&#26126;&#65306;</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> a<span class="sy4">;</span> <span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">struct</span> s<span class="sy4">;</span> <span class="co1">// &#19981;&#20570;&#20219;&#20309;&#20107;&#65288;s &#24050;&#32463;&#22312;&#27492;&#20316;&#29992;&#22495;&#23450;&#20041;&#65289;</span>
<span class="kw4">void</span> g<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
<span class="kw1">struct</span> s<span class="sy4">;</span> <span class="co1">// &#26032;&#30340;&#23616;&#37096;&#32467;&#26500;&#20307;&ldquo;s&rdquo;&#30340;&#21069;&#32622;&#22768;&#26126;</span>
<span class="co1">// &#23427;&#38544;&#34255;&#20840;&#23616;&#30340;&#32467;&#26500;&#20307; s &#30452;&#33267;&#27492;&#22359;&#32467;&#23614;</span>
s<span class="sy2">*</span> p<span class="sy4">;</span> <span class="co1">// &#25351;&#21521;&#23616;&#37096;&#32467;&#26500;&#20307; s &#30340;&#25351;&#38024;</span>
<span class="kw1">struct</span> s <span class="br0">{</span> <span class="kw4">char</span><span class="sy2">*</span> p<span class="sy4">;</span> <span class="br0">}</span><span class="sy4">;</span> <span class="co1">// &#23616;&#37096;&#32467;&#26500;&#20307; s &#30340;&#23450;&#20041;</span>
<span class="br0">}</span></pre></div>
</div>
<p>&#27880;&#24847;&#65292;&#36890;&#36807;&#20316;&#20026;&#20854;&#20182;&#22768;&#26126;&#19968;&#37096;&#20998;&#30340;<a href="cpp-language-elaborated_type_specifier.html">&#35814;&#36848;&#31867;&#22411;&#35828;&#26126;&#31526;</a>&#20063;&#21487;&#20197;&#24341;&#20837;&#26032;&#30340;&#31867;&#21517;&#65292;&#20294;&#21482;&#26377;&#22312;<a href="cpp-language-lookup.html">&#21517;&#23383;&#26597;&#25214;</a>&#26080;&#27861;&#25214;&#21040;&#20808;&#21069;&#22768;&#26126;&#30340;&#26377;&#27492;&#21517;&#30340;&#31867;&#26102;&#25165;&#21487;&#20197;&#12290;</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">class</span> U<span class="sy4">;</span>
<span class="kw1">namespace</span> ns<span class="br0">{</span>
<span class="kw1">class</span> Y f<span class="br0">(</span><span class="kw1">class</span> T p<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#22768;&#26126;&#20989;&#25968; ns::f &#24182;&#22768;&#26126; ns::T &#19982; ns::Y</span>
<span class="kw1">class</span> U f<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// U &#25351;&#20195; ::U</span>
Y<span class="sy2">*</span> p<span class="sy4">;</span> T<span class="sy2">*</span> q<span class="sy4">;</span> <span class="co1">// &#21487;&#20197;&#20351;&#29992;&#21040; T &#21644; Y &#30340;&#25351;&#38024;&#21450;&#24341;&#29992;</span>
<span class="br0">}</span></pre></div>
</div>
<h3><span class="mw-headline" id=".E6.88.90.E5.91.98.E8.AF.B4.E6.98.8E">&#25104;&#21592;&#35828;&#26126;</span></h3>
<p>&#25104;&#21592;&#35828;&#26126;&#65292;&#25110;&#31867;&#23450;&#20041;&#30340;<i>&#20307;</i>&#65292;&#26159;&#33457;&#25324;&#21495;&#29615;&#32469;&#30340;&#20219;&#20309;&#25968;&#37327;&#19979;&#21015;&#21508;&#39033;&#30340;&#24207;&#21015;&#65306;</p>
<div class="t-li1"><span class="t-li">1)</span> &#20855;&#26377;&#19979;&#21015;&#24418;&#24335;&#30340;&#25104;&#21592;&#22768;&#26126;
<table class="t-sdsc-begin">
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
<tr class="t-sdsc">
<td class="t-sdsc-nopad"><span class="t-spar">&#23646;&#24615;</span><span class="t-mark">(&#21487;&#36873;)</span> <span class="t-spar">&#22768;&#26126;&#35828;&#26126;&#31526;&#24207;&#21015;</span><span class="t-mark">(&#21487;&#36873;)</span> <span class="t-spar">&#25104;&#21592;&#22768;&#26126;&#31526;&#21015;&#34920;</span><span class="t-mark">(&#21487;&#36873;)</span> <code><b>;</b></code></td>
<td class="t-sdsc-nopad"></td>
<td class="t-sdsc-nopad"></td>
</tr>
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
</table>
<table class="t-par-begin">
<tr class="t-par">
<td><span class="t-spar">attr</span></td>
<td>-</td>
<td><span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span> &#21487;&#36873;&#30340;&#20219;&#24847;&#25968;&#37327;&#30340;<a href="cpp-language-attributes.html">&#23646;&#24615;</a>&#24207;&#21015;</td>
</tr>
<tr class="t-par">
<td><span class="t-spar">&#22768;&#26126;&#35828;&#26126;&#31526;&#24207;&#21015;</span></td>
<td>-</td>
<td><a href="cpp-language-declarations.html#.E8.AF.B4.E6.98.8E.E7.AC.A6">&#35828;&#26126;&#31526;</a>&#30340;&#24207;&#21015;&#12290;&#23427;&#21482;&#22312;&#26500;&#36896;&#20989;&#25968;&#65292;&#26512;&#26500;&#20989;&#25968;&#65292;&#20197;&#21450;&#29992;&#25143;&#23450;&#20041;<a href="cpp-language-cast_operator.html">&#36716;&#25442;&#20989;&#25968;</a>&#20013;&#21487;&#20197;&#30465;&#30053;&#12290;</td>
</tr>
<tr class="t-par">
<td><span class="t-spar">&#25104;&#21592;&#22768;&#26126;&#31526;&#21015;&#34920;</span></td>
<td>-</td>
<td>&#19982; <a href="cpp-language-declarations.html">&#21021;&#22987;&#21270;&#22768;&#26126;&#31526;&#21015;&#34920;</a>&#30456;&#21516;&#65292;&#20294;&#39069;&#22806;&#20801;&#35768;<a href="cpp-language-bit_field.html">&#20301;&#22495;&#23450;&#20041;</a>&#12289;<a href="cpp-language-abstract_class.html">&#32431;&#35828;&#26126;&#31526;</a><span class="t-rev-inl t-since-cxx11"><span>&#21644;&#34394;&#35828;&#26126;&#31526;&#65288; <code><a href="cpp-language-override.html">override</a></code> &#25110; <code><a href="cpp-language-final.html">final</a></code>&#65289;</span> <span><span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span></span></span>&#65292;&#24182;&#19988;&#19981;&#20801;&#35768;<a href="cpp-language-direct_initialization.html">&#30452;&#25509;&#38750;&#21015;&#34920;&#21021;&#22987;&#21270;&#35821;&#27861;</a>&#12290;</td>
</tr>
</table>
<p>&#36825;&#31181;&#22768;&#26126;&#21487;&#20197;&#22768;&#26126;<a href="cpp-language-static.html">&#38745;&#24577;</a>&#21450;&#38750;&#38745;&#24577;&#30340;<a href="cpp-language-data_members.html">&#25968;&#25454;&#25104;&#21592;</a>&#19982;<a href="cpp-language-member_functions.html">&#25104;&#21592;&#20989;&#25968;</a>&#12289;&#25104;&#21592; <a href="cpp-language-typedef.html">typedef</a>&#12289;&#25104;&#21592;<a href="cpp-language-enum.html">&#26522;&#20030;</a>&#20197;&#21450;<a href="cpp-language-nested_types.html">&#23884;&#22871;&#31867;</a>&#12290;&#23427;&#20063;&#21487;&#20197;&#26159;<a href="cpp-language-friend.html">&#21451;&#20803;&#22768;&#26126;</a>&#12290;</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> d1<span class="sy4">;</span> <span class="co1">// &#38750;&#38745;&#24577;&#25968;&#25454;&#25104;&#21592;</span>
<span class="kw4">int</span> a<span class="br0">[</span><span class="nu0">10</span><span class="br0">]</span> <span class="sy1">=</span> <span class="br0">{</span><span class="nu0">1</span>,<span class="nu0">2</span><span class="br0">}</span><span class="sy4">;</span> <span class="co1">// &#24102;&#21021;&#22987;&#21270;&#22120;&#30340;&#38750;&#38745;&#24577;&#25968;&#25454;&#25104;&#21592; (C++11)</span>
<span class="kw4">static</span> <span class="kw4">const</span> <span class="kw4">int</span> d2 <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span> <span class="co1">// &#24102;&#21021;&#22987;&#21270;&#22120;&#30340;&#38745;&#24577;&#25968;&#25454;&#25104;&#21592;</span>
<span class="kw1">virtual</span> <span class="kw4">void</span> f1<span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span> <span class="sy1">=</span> <span class="nu0">0</span><span class="sy4">;</span> <span class="co1">// &#32431;&#34394;&#25104;&#21592;&#20989;&#25968;</span>
<a href="cpp-string-basic_string.html"><span class="kw1230">std::<span class="me2">string</span></span></a> d3, <span class="sy2">*</span>d4, f2<span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#20004;&#20010;&#25968;&#25454;&#25104;&#21592;&#21644;&#19968;&#20010;&#25104;&#21592;&#20989;&#25968;</span>
<span class="kw2">enum</span> <span class="br0">{</span>NORTH, SOUTH, EAST, WEST<span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">struct</span> NestedS <span class="br0">{</span>
<a href="cpp-string-basic_string.html"><span class="kw1230">std::<span class="me2">string</span></span></a> s<span class="sy4">;</span>
<span class="br0">}</span> d5, <span class="sy2">*</span>d6<span class="sy4">;</span>
<span class="kw1">typedef</span> NestedS value_type, <span class="sy2">*</span>pointer_type<span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span></pre></div>
</div>
</div>
<div class="t-li1"><span class="t-li">2)</span> &#20989;&#25968;&#23450;&#20041;&#65292;&#21516;&#26102;&#22768;&#26126;&#24182;&#23450;&#20041;<a href="cpp-language-member_functions.html">&#25104;&#21592;&#20989;&#25968;</a>&#25110;&#32773;<a href="cpp-language-friend.html">&#21451;&#20803;&#20989;&#25968;</a>&#12290;&#25104;&#21592;&#20989;&#25968;&#23450;&#20041;&#20043;&#21518;&#30340;&#20998;&#21495;&#26159;&#21487;&#36873;&#30340;&#12290;&#25152;&#26377;&#23450;&#20041;&#20110;&#31867;&#20307;&#20043;&#20869;&#30340;&#20989;&#25968;&#33258;&#21160;&#20026;<a href="cpp-language-inline.html">&#20869;&#32852;</a>&#30340;<span class="t-rev-inl t-since-cxx20"><span>&#65292;&#38500;&#38750;&#23427;&#20204;&#38468;&#30528;&#21040;<a href="cpp-language-modules.html">&#20855;&#21517;&#27169;&#22359;</a></span> <span><span class="t-mark-rev t-since-cxx20">(C++20 &#36215;)</span></span></span>&#12290;
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">class</span> M <span class="br0">{</span>
<a href="cpp-types-size_t.html"><span class="kw100">std::<span class="me2">size_t</span></span></a> C<span class="sy4">;</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>
<span class="kw1">public</span><span class="sy4">:</span>
M<span class="br0">(</span><a href="cpp-types-size_t.html"><span class="kw100">std::<span class="me2">size_t</span></span></a> R, <a href="cpp-types-size_t.html"><span class="kw100">std::<span class="me2">size_t</span></span></a> C<span class="br0">)</span> <span class="sy4">:</span> C<span class="br0">(</span>C<span class="br0">)</span>, data<span class="br0">(</span>R<span class="sy2">*</span>C<span class="br0">)</span> <span class="br0">{</span><span class="br0">}</span> <span class="co1">// &#26500;&#36896;&#20989;&#25968;&#23450;&#20041;</span>
<span class="kw4">int</span> operator<span class="br0">(</span><span class="br0">)</span><span class="br0">(</span>size_t r, size_t c<span class="br0">)</span> <span class="kw4">const</span> <span class="br0">{</span> <span class="co1">// &#25104;&#21592;&#20989;&#25968;&#23450;&#20041;</span>
<span class="kw1">return</span> data<span class="br0">[</span>r<span class="sy2">*</span>C<span class="sy2">+</span>c<span class="br0">]</span><span class="sy4">;</span>
<span class="br0">}</span>
<span class="kw4">int</span><span class="sy3">&amp;</span> operator<span class="br0">(</span><span class="br0">)</span><span class="br0">(</span>size_t r, size_t c<span class="br0">)</span> <span class="br0">{</span> <span class="co1">// &#21478;&#19968;&#20010;&#25104;&#21592;&#20989;&#25968;&#23450;&#20041;</span>
<span class="kw1">return</span> data<span class="br0">[</span>r<span class="sy2">*</span>C<span class="sy2">+</span>c<span class="br0">]</span><span class="sy4">;</span>
<span class="br0">}</span>
<span class="br0">}</span><span class="sy4">;</span></pre></div>
</div>
</div>
<div class="t-li1"><span class="t-li">3)</span> <a href="cpp-language-access.html">&#35775;&#38382;&#35828;&#26126;&#31526;</a> <code>public:</code>&#12289;<code>protected:</code> &#21644; <code>private:</code>
<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="kw1">public</span><span class="sy4">:</span>
S<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#20844;&#24320;&#30340;&#26500;&#36896;&#20989;&#25968;</span>
S<span class="br0">(</span><span class="kw4">const</span> S<span class="sy3">&amp;</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#20844;&#24320;&#30340;&#22797;&#21046;&#26500;&#36896;&#20989;&#25968;</span>
<span class="kw1">virtual</span> ~S<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#20844;&#24320;&#30340;&#34394;&#26512;&#26500;&#20989;&#25968;</span>
<span class="kw1">private</span><span class="sy4">:</span>
<span class="kw4">int</span><span class="sy2">*</span> ptr<span class="sy4">;</span> <span class="co1">// &#31169;&#26377;&#30340;&#25968;&#25454;&#25104;&#21592;</span>
<span class="br0">}</span><span class="sy4">;</span></pre></div>
</div>
</div>
<div class="t-li1"><span class="t-li">4)</span> <a href="cpp-language-using_declaration.html">using &#22768;&#26126;</a>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">class</span> Base <span class="br0">{</span>
<span class="kw1">protected</span><span class="sy4">:</span>
<span class="kw4">int</span> d<span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">class</span> Derived <span class="sy4">:</span> <span class="kw1">public</span> Base <span class="br0">{</span>
<span class="kw1">public</span><span class="sy4">:</span>
<span class="kw1">using</span> Base<span class="sy4">::</span><span class="me2">d</span><span class="sy4">;</span> <span class="co1">// &#20196; Base &#30340;&#21463;&#20445;&#25252;&#25104;&#21592; d &#20026; Derived &#30340;&#20844;&#24320;&#25104;&#21592;</span>
<span class="kw1">using</span> Base<span class="sy4">::</span><span class="me2">Base</span><span class="sy4">;</span> <span class="co1">// &#32487;&#25215;&#22522;&#31867;&#30340;&#25152;&#26377;&#26500;&#36896;&#20989;&#25968; (C++11)</span>
<span class="br0">}</span><span class="sy4">;</span></pre></div>
</div>
</div>
<div class="t-li1"><span class="t-li">5)</span> <a href="cpp-language-static_assert.html">static_assert</a> &#22768;&#26126;
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">typename</span> T<span class="sy1">&gt;</span>
<span class="kw1">struct</span> Foo <span class="br0">{</span>
static_assert<span class="br0">(</span><a href="cpp-types-is_floating_point.html"><span class="kw458">std::<span class="me2">is_floating_point</span></span></a><span class="sy1">&lt;</span>T<span class="sy1">&gt;</span><span class="sy4">::</span><span class="me2">value</span>, <span class="st0">&quot;Foo&lt;T&gt;: T &#24517;&#39035;&#26159;&#28014;&#28857;&#25968;&quot;</span><span class="br0">)</span><span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span></pre></div>
</div>
</div>
<div class="t-li1"><span class="t-li">6)</span> <a href="cpp-language-member_template.html">&#25104;&#21592;&#27169;&#26495;&#22768;&#26126;</a>
<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="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">typename</span> T<span class="sy1">&gt;</span>
<span class="kw4">void</span> f<span class="br0">(</span>T<span class="sy3">&amp;&amp;</span> n<span class="br0">)</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> CharT<span class="sy1">&gt;</span>
<span class="kw1">struct</span> NestedS <span class="br0">{</span>
<a href="cpp-string-basic_string.html"><span class="kw1228">std::<span class="me2">basic_string</span></span></a><span class="sy1">&lt;</span>CharT<span class="sy1">&gt;</span> s<span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span></pre></div>
</div>
</div>
<div class="t-li1"><span class="t-li">7)</span> <a href="cpp-language-type_alias.html">&#21035;&#21517;&#22768;&#26126;</a>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">template</span> <span class="sy1">&lt;</span><span class="kw1">typename</span> T<span class="sy1">&gt;</span>
<span class="kw1">struct</span> identity
<span class="br0">{</span>
<span class="kw1">using</span> type <span class="sy1">=</span> T<span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span></pre></div>
</div>
</div>
<table class="t-rev-begin">
<tr class="t-rev t-since-cxx17">
<td>
<div class="t-li1"><span class="t-li">8)</span> &#25104;&#21592;&#31867;&#27169;&#26495;&#30340;<a href="cpp-language-class_template_argument_deduction.html">&#25512;&#23548;&#25351;&#24341;</a>&#65306;
<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="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> CharT<span class="sy1">&gt;</span>
<span class="kw1">struct</span> NestedS <span class="br0">{</span>
<a href="cpp-string-basic_string.html"><span class="kw1228">std::<span class="me2">basic_string</span></span></a><span class="sy1">&lt;</span>CharT<span class="sy1">&gt;</span> s<span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">template</span><span class="sy1">&lt;</span><span class="kw1">class</span> CharT<span class="sy1">&gt;</span>
NestedS<span class="br0">(</span><a href="cpp-string-basic_string.html"><span class="kw1228">std::<span class="me2">basic_string</span></span></a><span class="sy1">&lt;</span>CharT<span class="sy1">&gt;</span><span class="br0">)</span> <span class="sy2">-</span><span class="sy1">&gt;</span> NestedS<span class="sy1">&lt;</span>CharT<span class="sy1">&gt;</span><span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span></pre></div>
</div>
</div>
</td>
<td><span class="t-mark-rev t-since-cxx17">(C++17 &#36215;)</span></td>
</tr>
</table>
<table class="t-rev-begin">
<tr class="t-rev t-since-cxx20">
<td>
<div class="t-li1"><span class="t-li">9)</span> <a href="cpp-language-enum.html#using_enum_.E5.A3.B0.E6.98.8E">using enum &#22768;&#26126;</a>&#65306;
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw2">enum</span> <span class="kw1">class</span> color <span class="br0">{</span> red, orange, yellow <span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">struct</span> highlight <span class="br0">{</span>
<span class="kw1">using</span> <span class="kw2">enum</span> color<span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span></pre></div>
</div>
</div>
</td>
<td><span class="t-mark-rev t-since-cxx20">(C++20 &#36215;)</span></td>
</tr>
</table>
<h3><span class="mw-headline" id=".E5.B1.80.E9.83.A8.E7.B1.BB">&#23616;&#37096;&#31867;</span></h3>
<p>&#31867;&#22768;&#26126;&#21487;&#20197;&#22312;&#20989;&#25968;&#20307;&#20869;&#20986;&#29616;&#65292;&#27492;&#26102;&#23427;&#23450;&#20041;<i>&#23616;&#37096;&#31867;</i>&#12290;&#36825;&#31181;&#31867;&#30340;&#21517;&#23383;&#21482;&#23384;&#22312;&#20110;&#20989;&#25968;&#20316;&#29992;&#22495;&#20013;&#65292;&#19988;&#26080;&#27861;&#22312;&#20989;&#25968;&#22806;&#35775;&#38382;&#12290;</p>
<ul>
<li>&#23616;&#37096;&#31867;&#19981;&#33021;&#25317;&#26377;&#38745;&#24577;&#25968;&#25454;&#25104;&#21592;</li>
<li>&#23616;&#37096;&#31867;&#30340;&#25104;&#21592;&#20989;&#25968;&#26080;&#38142;&#25509;</li>
<li>&#23616;&#37096;&#31867;&#30340;&#25104;&#21592;&#20989;&#25968;&#24517;&#39035;&#23436;&#20840;&#22312;&#31867;&#20307;&#20869;&#23450;&#20041;</li>
<li><span class="t-rev-inl t-since-cxx14"><span>&#38500;<a href="cpp-language-lambda.html">&#38381;&#21253;&#31867;&#22411;</a>&#20197;&#22806;&#30340;</span> <span><span class="t-mark-rev t-since-cxx14">(C++14 &#36215;)</span></span></span>&#23616;&#37096;&#31867;&#19981;&#33021;&#25317;&#26377;&#25104;&#21592;&#27169;&#26495;</li>
<li>&#23616;&#37096;&#31867;&#19981;&#33021;&#25317;&#26377;<a href="cpp-language-friend.html#.E6.A8.A1.E6.9D.BF.E5.8F.8B.E5.85.83">&#21451;&#20803;&#27169;&#26495;</a></li>
<li>&#23616;&#37096;&#31867;&#19981;&#33021;&#22312;&#31867;&#23450;&#20041;&#20869;&#23450;&#20041;<a href="cpp-language-friend.html">&#21451;&#20803;&#20989;&#25968;</a></li>
<li>&#20989;&#25968;&#65288;&#21253;&#25324;&#25104;&#21592;&#20989;&#25968;&#65289;&#20869;&#30340;&#23616;&#37096;&#31867;&#30340;&#22806;&#22260;&#20989;&#25968;&#33021;&#35775;&#38382;&#30340;&#21517;&#23383;&#20063;&#21487;&#20197;&#34987;&#35813;&#23616;&#37096;&#31867;&#35775;&#38382;&#12290;</li>
</ul>
<table class="t-rev-begin">
<tr class="t-rev t-until-cxx11">
<td>
<ul>
<li>&#23616;&#37096;&#31867;&#19981;&#33021;&#29992;&#20316;&#27169;&#26495;&#23454;&#21442;</li>
</ul>
</td>
<td><span class="t-mark-rev t-until-cxx11">(C++11 &#21069;)</span></td>
</tr>
</table>
<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;vector&gt;</span>
<span class="co2">#include &lt;algorithm&gt;</span>
<span class="co2">#include &lt;iostream&gt;</span>
<span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span>
<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> v<span class="br0">{</span><span class="nu0">1</span>,<span class="nu0">2</span>,<span class="nu0">3</span><span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">struct</span> Local <span class="br0">{</span>
<span class="kw4">bool</span> operator<span class="br0">(</span><span class="br0">)</span><span class="br0">(</span><span class="kw4">int</span> n, <span class="kw4">int</span> m<span class="br0">)</span> <span class="br0">{</span>
<span class="kw1">return</span> n <span class="sy1">&gt;</span> m<span class="sy4">;</span>
<span class="br0">}</span>
<span class="br0">}</span><span class="sy4">;</span>
<a href="cpp-algorithm-sort.html"><span class="kw1618">std::<span class="me2">sort</span></span></a><span class="br0">(</span>v.<span class="me1">begin</span><span class="br0">(</span><span class="br0">)</span>, v.<span class="me1">end</span><span class="br0">(</span><span class="br0">)</span>, Local<span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// C++11 &#36215;</span>
<span class="kw1">for</span><span class="br0">(</span><span class="kw4">int</span> n<span class="sy4">:</span> v<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> n <span class="sy1">&lt;&lt;</span> <span class="st0">&#39; &#39;</span><span class="sy4">;</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">3 2 1</pre></div>
</div>
</div>
<h3><span class="mw-headline" id=".E5.8F.82.E9.98.85">&#21442;&#38405;</span></h3>
<table class="t-dsc-begin"></table>
</div>
<div class="visualClear"></div>
</div>
</div>
</div>
</body>
</html>