﻿<?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++博客-尘封的幻想-随笔分类-深度探索C++对象模型笔记</title><link>http://www.cppblog.com/sumflowers/category/9578.html</link><description>You got a dream,you have to pretend it</description><language>zh-cn</language><lastBuildDate>Sat, 14 Feb 2009 17:10:45 GMT</lastBuildDate><pubDate>Sat, 14 Feb 2009 17:10:45 GMT</pubDate><ttl>60</ttl><item><title>Ｃ＋＋程序设计模型三种模型</title><link>http://www.cppblog.com/sumflowers/archive/2009/02/15/73822.html</link><dc:creator>小修</dc:creator><author>小修</author><pubDate>Sat, 14 Feb 2009 16:16:00 GMT</pubDate><guid>http://www.cppblog.com/sumflowers/archive/2009/02/15/73822.html</guid><wfw:comment>http://www.cppblog.com/sumflowers/comments/73822.html</wfw:comment><comments>http://www.cppblog.com/sumflowers/archive/2009/02/15/73822.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/sumflowers/comments/commentRss/73822.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sumflowers/services/trackbacks/73822.html</trackback:ping><description><![CDATA[Ｃ＋＋程序设计模型直接支持三种 <strong>programming paradigms </strong>（程序设计典范）<br><br>１．程序模型（<strong>procedural model</strong>），就像C一样，Ｃ＋＋当然也支持它，字符串的处理就是一个例子，我们可以使用字符数组以及 str* 函数集（定义在标准的Ｃ函数库中）：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;boy[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Danny</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">p_son;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&#8230;&#8230;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>p_son&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">[&nbsp;strlen&nbsp;(boy&nbsp;)&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;];<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>strcpy(&nbsp;p_son,&nbsp;boy&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&#8230;&#8230;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(&nbsp;</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">strcmp(&nbsp;p_son,&nbsp;boy&nbsp;)&nbsp;)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;take_to_disneyland(&nbsp;boy&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<br>２．抽象数据类型模型（<strong>abstract data type model, ADT</strong>)。该模型所谓的&#8220;抽象&#8221;是和一组表达式（public 接口）一起提供，而其运算定义仍然隐而未明。例如下面的String class:<br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">String&nbsp;girl&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Anna</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>String&nbsp;daughter;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&#8230;&#8230;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;String::operator=();</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">daughter&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;girl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&#8230;&#8230;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;String::operator==();</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(&nbsp;girl&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;daughter&nbsp;)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;take_to_disneyland(&nbsp;girl&nbsp;);</span></div>
<br>３．面向对象模型（object-oriented model）。在此模型中有一些彼此相关的类型，通过一个抽象的 base class (用以提供共通接口）被封装起来。Library_materials class 就是一个例子，真正的 subtypes 例如 Book、Video、Compact_Disc、Puppet、Laptop 等等都可以从那里派生而来：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;check_in(&nbsp;Library_materials&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pmat&nbsp;)<br><img id=Codehighlighter1_41_175_Open_Image onclick="this.style.display='none'; Codehighlighter1_41_175_Open_Text.style.display='none'; Codehighlighter1_41_175_Closed_Image.style.display='inline'; Codehighlighter1_41_175_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_41_175_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_41_175_Closed_Text.style.display='none'; Codehighlighter1_41_175_Open_Image.style.display='inline'; Codehighlighter1_41_175_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_41_175_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_41_175_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(&nbsp;pmat</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">late()&nbsp;)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pmat</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">fine();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;pmat</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">check_in();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(&nbsp;Lender&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">plend&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;pmat</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">reserved()&nbsp;)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pmat</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">notify(&nbsp;plend&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<img src ="http://www.cppblog.com/sumflowers/aggbug/73822.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sumflowers/" target="_blank">小修</a> 2009-02-15 00:16 <a href="http://www.cppblog.com/sumflowers/archive/2009/02/15/73822.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>