﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-shaojingliu</title><link>http://www.cppblog.com/shaojingliu/</link><description>shaojingliu</description><language>zh-cn</language><lastBuildDate>Thu, 23 Apr 2026 10:09:42 GMT</lastBuildDate><pubDate>Thu, 23 Apr 2026 10:09:42 GMT</pubDate><ttl>60</ttl><item><title>vtable示意图</title><link>http://www.cppblog.com/shaojingliu/archive/2013/03/04/198201.html</link><dc:creator>shaojingliu</dc:creator><author>shaojingliu</author><pubDate>Mon, 04 Mar 2013 07:29:00 GMT</pubDate><guid>http://www.cppblog.com/shaojingliu/archive/2013/03/04/198201.html</guid><wfw:comment>http://www.cppblog.com/shaojingliu/comments/198201.html</wfw:comment><comments>http://www.cppblog.com/shaojingliu/archive/2013/03/04/198201.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/shaojingliu/comments/commentRss/198201.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shaojingliu/services/trackbacks/198201.html</trackback:ping><description><![CDATA[<img src="http://www.learncpp.com/images/CppTutorial/Section12/VTable.gif" width="492" height="483" alt="" /><img src ="http://www.cppblog.com/shaojingliu/aggbug/198201.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shaojingliu/" target="_blank">shaojingliu</a> 2013-03-04 15:29 <a href="http://www.cppblog.com/shaojingliu/archive/2013/03/04/198201.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>vtable测试</title><link>http://www.cppblog.com/shaojingliu/archive/2013/03/04/198200.html</link><dc:creator>shaojingliu</dc:creator><author>shaojingliu</author><pubDate>Mon, 04 Mar 2013 07:03:00 GMT</pubDate><guid>http://www.cppblog.com/shaojingliu/archive/2013/03/04/198200.html</guid><wfw:comment>http://www.cppblog.com/shaojingliu/comments/198200.html</wfw:comment><comments>http://www.cppblog.com/shaojingliu/archive/2013/03/04/198200.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/shaojingliu/comments/commentRss/198200.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shaojingliu/services/trackbacks/198200.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;typedef&nbsp;unsigned&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;<span style="color: #0000FF; ">uint</span>;<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;typedef&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;(*callPtr)();<br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;CBaseClass<br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;{<br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #0000FF; ">public</span>:<br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CBaseClass(){}<br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~CBaseClass(){}<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">virtual</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;Print()<br /><span style="color: #008080; ">10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("Call:&nbsp;CBaseClass&nbsp;Print\n");<br /><span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">13</span>&nbsp;};<br /><span style="color: #008080; ">14</span>&nbsp;<br /><span style="color: #008080; ">15</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;CDeriveClass:&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;CBaseClass<br /><span style="color: #008080; ">16</span>&nbsp;{<br /><span style="color: #008080; ">17</span>&nbsp;<span style="color: #0000FF; ">public</span>:<br /><span style="color: #008080; ">18</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDeriveClass(){}<br /><span style="color: #008080; ">19</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~CDeriveClass(){}<br /><span style="color: #008080; ">20</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">virtual</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;Print()<br /><span style="color: #008080; ">21</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">22</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("Call:&nbsp;CDeriveClass&nbsp;Print\n");<br /><span style="color: #008080; ">23</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">24</span>&nbsp;};<br /><span style="color: #008080; ">25</span>&nbsp;<br /><span style="color: #008080; ">26</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main()<br /><span style="color: #008080; ">27</span>&nbsp;{<br /><span style="color: #008080; ">28</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;创建对象&nbsp;pDeriveA</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">29</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;CBaseClass*&nbsp;pDeriveA=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;CDeriveClass();<br /><span style="color: #008080; ">30</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;获得对象A的vtable</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">31</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">uint</span>*&nbsp;pVTableA=&nbsp;(<span style="color: #0000FF; ">uint</span>*)*((<span style="color: #0000FF; ">uint</span>*)pDeriveA);<br /><span style="color: #008080; ">32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;取得vtable中第0个function</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">33</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;callPtr&nbsp;funcA=&nbsp;(callPtr)pVTableA[0];<br /><span style="color: #008080; ">34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;调用Print</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">35</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;funcA();<br /><span style="color: #008080; ">36</span>&nbsp;<br /><span style="color: #008080; ">37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;创建对象&nbsp;pDeriveB</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">38</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;CBaseClass*&nbsp;pDeriveB=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;CDeriveClass();<br /><span style="color: #008080; ">39</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;获得对象B的vtable</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">40</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">uint</span>*&nbsp;pVTableB=&nbsp;(<span style="color: #0000FF; ">uint</span>*)*((<span style="color: #0000FF; ">uint</span>*)pDeriveB);<br /><span style="color: #008080; ">41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;2个对象的VTable应该相等</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">42</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;printf("vtable&nbsp;%s\n",&nbsp;(pVTableA==&nbsp;pVTableB)&nbsp;?&nbsp;"Equal!"&nbsp;:&nbsp;"Not&nbsp;Equal!");<br /><span style="color: #008080; ">43</span>&nbsp;<br /><span style="color: #008080; ">44</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">45</span>&nbsp;}<br /><span style="color: #008080; ">46</span>&nbsp;</div><img src ="http://www.cppblog.com/shaojingliu/aggbug/198200.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shaojingliu/" target="_blank">shaojingliu</a> 2013-03-04 15:03 <a href="http://www.cppblog.com/shaojingliu/archive/2013/03/04/198200.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>