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

145 lines
21 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>dynamic_cast &#36716;&#25442;</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_dynamic_cast skin-cppreference2 action-view cpp-navbar">
<div id="cpp-content-base">
<div id="content"><a id="top"></a>
<h1 id="firstHeading" class="firstHeading">dynamic_cast &#36716;&#25442;</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>&#27839;&#32487;&#25215;&#23618;&#32423;&#21521;&#19978;&#12289;&#21521;&#19979;&#21450;&#20391;&#21521;&#65292;&#23433;&#20840;&#22320;&#36716;&#25442;&#21040;&#20854;&#20182;&#31867;&#30340;&#25351;&#38024;&#21644;&#24341;&#29992;&#12290;</p>
<h3><span class="mw-headline" id=".E8.AF.AD.E6.B3.95">&#35821;&#27861;</span></h3>
<table class="t-sdsc-begin">
<tr>
<td colspan="10" class="t-sdsc-sep"></td>
</tr>
<tr class="t-sdsc">
<td class="t-sdsc-nopad"><code><b>dynamic_cast</b></code> <code><b>&lt;</b></code> <span class="t-spar">&#26032;&#31867;&#22411;</span> <code><b>&gt;</b></code> <code><b>(</b></code> <span class="t-spar">&#34920;&#36798;&#24335;</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">&#26032;&#31867;&#22411;</span></td>
<td>-</td>
<td>&#25351;&#21521;&#23436;&#25972;&#31867;&#31867;&#22411;&#30340;&#25351;&#38024;&#65292;&#21040;&#23436;&#25972;&#31867;&#31867;&#22411;&#30340;&#24341;&#29992;&#65292;&#25110;&#25351;&#21521;&#65288;&#21487;&#20026; cv &#38480;&#23450;&#30340;&#65289;void &#30340;&#25351;&#38024;</td>
</tr>
<tr class="t-par">
<td><span class="t-spar">&#34920;&#36798;&#24335;</span></td>
<td>-</td>
<td>&#22914;&#26524; <span class="t-spar">&#26032;&#31867;&#22411;</span> &#20026;&#24341;&#29992;&#65292;&#21017;&#20026;&#23436;&#25972;&#31867;&#31867;&#22411;&#30340;<span class="t-rev-inl t-until-cxx11"><span>&#24038;&#20540;</span> <span><span class="t-mark-rev t-until-cxx11">(C++11 &#21069;)</span></span></span><span class="t-rev-inl t-since-cxx11"><span>&#27867;&#24038;&#20540;</span> <span><span class="t-mark-rev t-since-cxx11">(C++11 &#36215;)</span></span></span>&#34920;&#36798;&#24335;&#65292;&#33509; <span class="t-spar">&#26032;&#31867;&#22411;</span> &#20026;&#25351;&#38024;&#65292;&#21017;&#20026;&#25351;&#21521;&#23436;&#25972;&#31867;&#31867;&#22411;&#30340;&#25351;&#38024;&#32431;&#21491;&#20540;&#12290;</td>
</tr>
</table>
<p>&#22914;&#26524;&#36716;&#22411;&#25104;&#21151;&#65292;&#21017; <code>dynamic_cast</code> &#36820;&#22238; <span class="t-spar">&#26032;&#31867;&#22411;</span> &#31867;&#22411;&#30340;&#20540;&#12290;&#22914;&#26524;&#36716;&#22411;&#22833;&#36133;&#19988; <span class="t-spar">&#26032;&#31867;&#22411;</span> &#26159;&#25351;&#38024;&#31867;&#22411;&#65292;&#21017;&#23427;&#36820;&#22238;&#35813;&#31867;&#22411;&#30340;&#31354;&#25351;&#38024;&#12290;&#22914;&#26524;&#36716;&#22411;&#22833;&#36133;&#19988; <span class="t-spar">&#26032;&#31867;&#22411;</span> &#26159;&#24341;&#29992;&#31867;&#22411;&#65292;&#21017;&#23427;&#25243;&#20986;&#19982;&#31867;&#22411; <span class="t-lc"><a href="cpp-types-bad_cast.html">std::bad_cast</a></span> &#30340;&#22788;&#29702;&#22359;&#21305;&#37197;&#30340;&#24322;&#24120;&#12290;</p>
<h3><span class="mw-headline" id=".E8.A7.A3.E9.87.8A">&#35299;&#37322;</span></h3>
<p>&#21482;&#26377;&#19979;&#21015;&#36716;&#25442;&#22312;&#19981;&#21435;&#38500;<i>&#24120;&#37327;&#24615;</i>&#25110;<i>&#26131;&#21464;&#24615;</i>&#30340;&#22330;&#21512;&#25165;&#33021;&#29992; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw1">dynamic_cast</span></span></span> &#36827;&#34892;&#12290;</p>
<div class="t-li1"><span class="t-li">1)</span> &#22914;&#26524; <span class="t-spar">&#34920;&#36798;&#24335;</span> &#30340;&#31867;&#22411;&#21018;&#22909;&#26159; <span class="t-spar">&#26032;&#31867;&#22411;</span> &#25110; <span class="t-spar">&#26032;&#31867;&#22411;</span> &#30340;&#26356;&#23569; cv &#38480;&#23450;&#29256;&#26412;&#65292;&#21017;&#32467;&#26524;&#26159; <span class="t-spar">&#34920;&#36798;&#24335;</span> &#20855;&#26377; <span class="t-spar">&#26032;&#31867;&#22411;</span> &#31867;&#22411;&#30340;&#20540;&#12290;&#65288;&#25442;&#35328;&#20043;&#65292;<span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw1">dynamic_cast</span></span></span> &#21487;&#20197;&#29992;&#26469;&#28155;&#21152;&#24120;&#37327;&#24615;&#12290;&#38544;&#24335;&#36716;&#25442;&#21644; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw1">static_cast</span></span></span> &#20063;&#33021;&#36827;&#34892;&#27492;&#36716;&#25442;&#12290;&#65289;</div>
<div class="t-li1"><span class="t-li">2)</span> &#22914;&#26524; <span class="t-spar">&#34920;&#36798;&#24335;</span> &#30340;&#20540;&#26159;&#31354;&#25351;&#38024;&#20540;&#65292;&#21017;&#32467;&#26524;&#26159; <span class="t-spar">&#26032;&#31867;&#22411;</span> &#31867;&#22411;&#30340;&#31354;&#25351;&#38024;&#20540;&#12290;</div>
<div class="t-li1"><span class="t-li">3)</span> &#22914;&#26524; <span class="t-spar">&#26032;&#31867;&#22411;</span> &#26159;&#21040; <code>Base</code> &#30340;&#25351;&#38024;&#25110;&#24341;&#29992;&#65292;&#19988; <span class="t-spar">&#34920;&#36798;&#24335;</span> &#30340;&#31867;&#22411;&#26159;&#21040; <code>Derived</code> &#30340;&#25351;&#38024;&#25110;&#24341;&#29992;&#65292;&#20854;&#20013; <code>Base</code> &#26159; <code>Derived</code> &#30340;&#19968;&#20010;&#21807;&#19968;&#30340;&#21644;&#21487;&#35775;&#38382;&#30340;&#22522;&#31867;&#65292;&#21017;&#32467;&#26524;&#26159;&#21040; <span class="t-spar">&#34920;&#36798;&#24335;</span> &#25152;&#26631;&#35782;&#30340;&#23545;&#35937;&#20013; <code>Base</code> &#31867;&#23376;&#23545;&#35937;&#30340;&#25351;&#38024;&#25110;&#24341;&#29992;&#12290;&#65288;&#27880;&#24847;&#65306;&#38544;&#24335;&#36716;&#25442;&#21644; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw1">static_cast</span></span></span> &#20063;&#33021;&#36827;&#34892;&#27492;&#36716;&#25442;&#12290;&#65289;</div>
<div class="t-li1"><span class="t-li">4)</span> &#22914;&#26524; <span class="t-spar">&#34920;&#36798;&#24335;</span> &#26159;&#25351;&#21521;<a href="cpp-language-object.html#.E5.A4.9A.E6.80.81.E5.AF.B9.E8.B1.A1">&#22810;&#24577;&#31867;&#22411;</a>&#30340;&#25351;&#38024;&#65292;&#19988; <span class="t-spar">&#26032;&#31867;&#22411;</span> &#26159;&#21040; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw4">void</span></span></span> &#30340;&#25351;&#38024;&#65292;&#21017;&#32467;&#26524;&#26159;&#25351;&#21521; <span class="t-spar">&#34920;&#36798;&#24335;</span> &#25152;&#25351;&#21521;&#25110;&#24341;&#29992;&#30340;&#26368;&#32456;&#27966;&#29983;&#23545;&#35937;&#30340;&#25351;&#38024;&#12290;</div>
<div class="t-li1"><span class="t-li">5)</span> &#22914;&#26524; <span class="t-spar">&#34920;&#36798;&#24335;</span> &#26159;&#21040;<a href="cpp-language-object.html#.E5.A4.9A.E6.80.81.E5.AF.B9.E8.B1.A1">&#22810;&#24577;&#31867;&#22411;</a> <code>Base</code> &#30340;&#25351;&#38024;&#25110;&#24341;&#29992;&#65292;&#19988; <span class="t-spar">&#26032;&#31867;&#22411;</span> &#26159;&#21040; <code>Derived</code> &#31867;&#22411;&#30340;&#25351;&#38024;&#25110;&#24341;&#29992;&#65292;&#21017;&#36827;&#34892;&#36816;&#34892;&#26102;&#26816;&#26597;&#65306;</div>
<div class="t-li2"><span class="t-li">a)</span> &#26816;&#39564; <span class="t-spar">&#34920;&#36798;&#24335;</span> &#25152;&#25351;&#21521;/&#26631;&#35782;&#30340;&#26368;&#32456;&#27966;&#29983;&#23545;&#35937;&#12290;&#33509;&#22312;&#35813;&#23545;&#35937;&#20013; <span class="t-spar">&#34920;&#36798;&#24335;</span> &#25351;&#21521;/&#25351;&#20195; <code>Derived</code> &#30340;&#20844;&#24320;&#22522;&#31867;&#65292;&#19988;&#21482;&#26377;&#19968;&#20010; <code>Derived</code> &#31867;&#22411;&#23545;&#35937;&#20174; <span class="t-spar">&#34920;&#36798;&#24335;</span> &#25152;&#25351;&#21521;/&#26631;&#35782;&#30340;&#23376;&#23545;&#35937;&#27966;&#29983;&#65292;&#21017;&#36716;&#22411;&#32467;&#26524;&#25351;&#21521;/&#25351;&#20195;&#35813; <code>Derived</code> &#23545;&#35937;&#12290;&#65288;&ldquo;&#21521;&#19979;&#36716;&#22411;&#65288;downcast&#65289;&rdquo;&#65289;</div>
<div class="t-li2"><span class="t-li">b)</span> &#21542;&#21017;&#65292;&#33509; <span class="t-spar">&#34920;&#36798;&#24335;</span> &#25351;&#21521;/&#25351;&#20195;&#26368;&#32456;&#27966;&#29983;&#23545;&#35937;&#30340;&#20844;&#24320;&#22522;&#31867;&#65292;&#32780;&#21516;&#26102;&#26368;&#32456;&#27966;&#29983;&#23545;&#35937;&#25317;&#26377; <code>Derived</code> &#31867;&#22411;&#30340;&#26080;&#27495;&#20041;&#20844;&#24320;&#22522;&#31867;&#65292;&#21017;&#36716;&#22411;&#32467;&#26524;&#25351;&#21521;/&#25351;&#20195;&#35813; <code>Derived</code>&#12290;&#65288;&ldquo;&#20391;&#21521;&#36716;&#22411;&#65288;sidecast&#65289;&rdquo;&#65289;</div>
<div class="t-li2"><span class="t-li">c)</span> &#21542;&#21017;&#65292;&#36816;&#34892;&#26102;&#26816;&#26597;&#22833;&#36133;&#12290;&#33509; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw1">dynamic_cast</span></span></span> &#29992;&#20110;&#25351;&#38024;&#65292;&#21017;&#36820;&#22238; <span class="t-spar">&#26032;&#31867;&#22411;</span> &#31867;&#22411;&#30340;&#31354;&#25351;&#38024;&#20540;&#12290;&#33509;&#23427;&#29992;&#20110;&#24341;&#29992;&#65292;&#21017;&#25243;&#20986; <span class="t-lc"><a href="cpp-types-bad_cast.html">std::bad_cast</a></span> &#24322;&#24120;&#12290;</div>
<div class="t-li1"><span class="t-li">6)</span> &#24403;&#22312;&#26500;&#36896;&#20989;&#25968;&#25110;&#26512;&#26500;&#20989;&#25968;&#20013;&#65288;&#30452;&#25509;&#25110;&#38388;&#25509;&#65289;&#20351;&#29992; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw1">dynamic_cast</span></span></span>&#65292;&#19988; <span class="t-spar">&#34920;&#36798;&#24335;</span> &#25351;&#20195;&#27491;&#22312;&#26500;&#36896;/&#38144;&#27585;&#30340;&#23545;&#35937;&#26102;&#65292;&#35813;&#23545;&#35937;&#34987;&#35748;&#20026;&#26159;&#26368;&#32456;&#27966;&#29983;&#23545;&#35937;&#12290;&#33509; <span class="t-spar">&#26032;&#31867;&#22411;</span> &#19981;&#26159;&#21040;&#26500;&#36896;&#20989;&#25968;/&#26512;&#26500;&#20989;&#25968;&#33258;&#36523;&#30340;&#31867;&#25110;&#20854;&#22522;&#31867;&#20043;&#19968;&#30340;&#25351;&#38024;&#25110;&#24341;&#29992;&#65292;&#21017;&#34892;&#20026;&#26410;&#23450;&#20041;&#12290;</div>
<p>&#19982;&#20854;&#20182;&#36716;&#22411;&#34920;&#36798;&#24335;&#30456;&#20284;&#65306;</p>
<ul>
<li>&#33509; <span class="t-spar">&#26032;&#31867;&#22411;</span> &#26159;&#24038;&#20540;&#24341;&#29992;&#31867;&#22411;&#65288;<span class="t-spar">&#34920;&#36798;&#24335;</span> &#24517;&#20026;&#24038;&#20540;&#65289;&#65292;&#21017;&#20854;&#32467;&#26524;&#20026;&#24038;&#20540;</li>
<li>&#33509; <span class="t-spar">&#26032;&#31867;&#22411;</span> &#26159;&#21491;&#20540;&#24341;&#29992;&#31867;&#22411;&#65288;<span class="t-spar">&#34920;&#36798;&#24335;</span> &#20026;&#23436;&#25972;&#31867;&#31867;&#22411;&#65292;<span class="t-rev-inl t-until-cxx17"><span>&#21487;&#20197;&#26159;&#24038;&#20540;&#25110;&#21491;&#20540;</span> <span><span class="t-mark-rev t-until-cxx17">(C++17 &#21069;)</span></span></span><span class="t-rev-inl t-since-cxx17"><span>&#24517;&#20026;&#27867;&#24038;&#20540;&#65288;&#32431;&#21491;&#20540;&#34987;<a href="cpp-language-implicit_conversion.html#.E4.B8.B4.E6.97.B6.E9.87.8F.E5.AE.9E.E8.B4.A8.E5.8C.96">&#23454;&#36136;&#21270;</a>&#65289;</span> <span><span class="t-mark-rev t-since-cxx17">(C++17 &#36215;)</span></span></span>&#65289;&#65292;&#21017;&#20854;&#32467;&#26524;&#20026;&#20129;&#20540;</li>
<li>&#33509; <span class="t-spar">&#26032;&#31867;&#22411;</span> &#26159;&#25351;&#38024;&#31867;&#22411;&#65292;&#21017;&#20854;&#32467;&#26524;&#20026;&#32431;&#21491;&#20540;</li>
</ul>
<h3><span class="mw-headline" id=".E6.B3.A8.E8.A7.A3">&#27880;&#35299;</span></h3>
<ul>
<li><span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw1">static_cast</span></span></span> &#20063;&#33021;&#29992;&#26469;&#36827;&#34892;&#21521;&#19979;&#36716;&#22411;&#65292;&#23427;&#36991;&#20813;&#36816;&#34892;&#26102;&#26816;&#26597;&#30340;&#24320;&#38144;&#65292;&#20294;&#21482;&#26377;&#22312;&#31243;&#24207;&#65288;&#36890;&#36807;&#26576;&#20123;&#20854;&#20182;&#36923;&#36753;&#65289;&#33021;&#22815;&#20445;&#35777; <span class="t-spar">&#34920;&#36798;&#24335;</span> &#25152;&#25351;&#21521;&#30340;&#23545;&#35937;&#32943;&#23450;&#26159; <code>Derived</code> &#26102;&#25165;&#26159;&#23433;&#20840;&#30340;&#12290;</li>
<li>&#26576;&#20123;&#24418;&#24335;&#30340; <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="kw1">dynamic_cast</span></span></span> &#20381;&#36182;&#20110;<a href="https://en.wikipedia.org/wiki/Run-time_type_information" class="extiw" title="enwiki:Run-time type information">&#36816;&#34892;&#26102;&#31867;&#22411;&#37492;&#21035;</a>&#65288; RTTI &#65289;&#65292;&#21363;&#32534;&#35793;&#30340;&#31243;&#24207;&#20013;&#20851;&#20110;&#27599;&#20010;&#22810;&#24577;&#31867;&#30340;&#20449;&#24687;&#12290;&#32534;&#35793;&#22120;&#36890;&#24120;&#26377;&#36873;&#39033;&#31105;&#29992;&#27492;&#20449;&#24687;&#12290;</li>
</ul>
<h3><span class="mw-headline" id=".E5.85.B3.E9.94.AE.E8.AF.8D">&#20851;&#38190;&#35789;</span></h3>
<p><a href="cpp-keyword-dynamic_cast.html"><tt>dynamic_cast</tt></a></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="kw1">struct</span> V <span class="br0">{</span>
<span class="kw1">virtual</span> <span class="kw4">void</span> f<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span><span class="br0">}</span> <span class="co1">// &#24517;&#39035;&#20026;&#22810;&#24577;&#20197;&#20351;&#29992;&#36816;&#34892;&#26102;&#26816;&#26597;&#30340; dynamic_cast</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">struct</span> A <span class="sy4">:</span> <span class="kw1">virtual</span> V <span class="br0">{</span><span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">struct</span> B <span class="sy4">:</span> <span class="kw1">virtual</span> V <span class="br0">{</span>
B<span class="br0">(</span>V<span class="sy2">*</span> v, A<span class="sy2">*</span> a<span class="br0">)</span> <span class="br0">{</span>
<span class="co1">// &#26500;&#36896;&#20013;&#36716;&#22411;&#65288;&#35265;&#21518;&#36848; D &#30340;&#26500;&#36896;&#20989;&#25968;&#20013;&#30340;&#35843;&#29992;&#65289;</span>
<span class="kw1">dynamic_cast</span><span class="sy1">&lt;</span>B<span class="sy2">*</span><span class="sy1">&gt;</span><span class="br0">(</span>v<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#33391;&#22909;&#23450;&#20041;&#65306;v &#26377;&#31867;&#22411; V*&#65292;B &#30340; V &#22522;&#31867;&#65292;&#20135;&#29983; B*</span>
<span class="kw1">dynamic_cast</span><span class="sy1">&lt;</span>B<span class="sy2">*</span><span class="sy1">&gt;</span><span class="br0">(</span>a<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#26410;&#23450;&#20041;&#34892;&#20026;&#65306;a &#26377;&#31867;&#22411; A*&#65292;A &#38750; B &#30340;&#22522;&#31867;</span>
<span class="br0">}</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">struct</span> D <span class="sy4">:</span> A, B <span class="br0">{</span>
D<span class="br0">(</span><span class="br0">)</span> <span class="sy4">:</span> B<span class="br0">(</span><span class="br0">(</span>A<span class="sy2">*</span><span class="br0">)</span>this, this<span class="br0">)</span> <span class="br0">{</span> <span class="br0">}</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">struct</span> Base <span class="br0">{</span>
<span class="kw1">virtual</span> ~Base<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span><span class="br0">}</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">struct</span> Derived<span class="sy4">:</span> Base <span class="br0">{</span>
<span class="kw1">virtual</span> <span class="kw4">void</span> name<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</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 d<span class="sy4">;</span> <span class="co1">// &#26368;&#32456;&#27966;&#29983;&#23545;&#35937;</span>
A<span class="sy3">&amp;</span> a <span class="sy1">=</span> d<span class="sy4">;</span> <span class="co1">// &#21521;&#19978;&#36716;&#22411;&#65292;&#21487;&#20197;&#29992; dynamic_cast&#65292;&#20294;&#19981;&#24517;&#39035;</span>
D<span class="sy3">&amp;</span> new_d <span class="sy1">=</span> <span class="kw1">dynamic_cast</span><span class="sy1">&lt;</span>D<span class="sy3">&amp;</span><span class="sy1">&gt;</span><span class="br0">(</span>a<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#21521;&#19979;&#36716;&#22411;</span>
B<span class="sy3">&amp;</span> new_b <span class="sy1">=</span> <span class="kw1">dynamic_cast</span><span class="sy1">&lt;</span>B<span class="sy3">&amp;</span><span class="sy1">&gt;</span><span class="br0">(</span>a<span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#20391;&#21521;&#36716;&#22411;</span>
Base<span class="sy2">*</span> b1 <span class="sy1">=</span> new Base<span class="sy4">;</span>
<span class="kw1">if</span><span class="br0">(</span>Derived<span class="sy2">*</span> d <span class="sy1">=</span> <span class="kw1">dynamic_cast</span><span class="sy1">&lt;</span>Derived<span class="sy2">*</span><span class="sy1">&gt;</span><span class="br0">(</span>b1<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;&#25104;&#21151;&#20174; b1 &#21521;&#19979;&#36716;&#22411;&#21040; d<span class="es1">\n</span>&quot;</span><span class="sy4">;</span>
d<span class="sy2">-</span><span class="sy1">&gt;</span>name<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#21487;&#20197;&#23433;&#20840;&#35843;&#29992;</span>
<span class="br0">}</span>
Base<span class="sy2">*</span> b2 <span class="sy1">=</span> new Derived<span class="sy4">;</span>
<span class="kw1">if</span><span class="br0">(</span>Derived<span class="sy2">*</span> d <span class="sy1">=</span> <span class="kw1">dynamic_cast</span><span class="sy1">&lt;</span>Derived<span class="sy2">*</span><span class="sy1">&gt;</span><span class="br0">(</span>b2<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;&#25104;&#21151;&#20174; b2 &#21521;&#19979;&#36716;&#22411;&#21040; d<span class="es1">\n</span>&quot;</span><span class="sy4">;</span>
d<span class="sy2">-</span><span class="sy1">&gt;</span>name<span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// &#21487;&#20197;&#23433;&#20840;&#35843;&#29992;</span>
<span class="br0">}</span>
delete b1<span class="sy4">;</span>
delete b2<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">&#25104;&#21151;&#20174; b2 &#21521;&#19979;&#36716;&#22411;&#21040; d</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-const_cast.html"><code>const_cast</code></a></li>
<li><a href="cpp-language-static_cast.html"><code>static_cast</code></a></li>
<li><a href="cpp-language-reinterpret_cast.html"><code>reinterpret_cast</code></a></li>
<li><a href="cpp-language-explicit_cast.html">&#26174;&#24335;&#36716;&#22411;</a></li>
<li><a href="cpp-language-implicit_conversion.html">&#38544;&#24335;&#36716;&#25442;</a></li>
</ul>
</div>
<div class="visualClear"></div>
</div>
</div>
</div>
</body>
</html>