﻿<?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++博客-机器视觉 自动化设备软件</title><link>http://www.cppblog.com/yjlft/</link><description /><language>zh-cn</language><lastBuildDate>Tue, 09 Jun 2026 20:10:06 GMT</lastBuildDate><pubDate>Tue, 09 Jun 2026 20:10:06 GMT</pubDate><ttl>60</ttl><item><title>类和数据抽象</title><link>http://www.cppblog.com/yjlft/archive/2011/02/15/140083.html</link><dc:creator>Tony Liu</dc:creator><author>Tony Liu</author><pubDate>Tue, 15 Feb 2011 06:20:00 GMT</pubDate><guid>http://www.cppblog.com/yjlft/archive/2011/02/15/140083.html</guid><wfw:comment>http://www.cppblog.com/yjlft/comments/140083.html</wfw:comment><comments>http://www.cppblog.com/yjlft/archive/2011/02/15/140083.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/yjlft/comments/commentRss/140083.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/yjlft/services/trackbacks/140083.html</trackback:ping><description><![CDATA[




<p class="docText">只要类名一出现就可以认为该类已声明。因此，类的数据成员可以是指向自身类型的指针或引用：</p><pre>     class LinkScreen {
         Screen window;
         LinkScreen *next;
         LinkScreen *prev;
     };</pre><pre><br></pre><pre><p class="docText">类的定义分号结束。分号是必需的，因为在类定义之后可以接一个对象定义列表。定义必须以分号结束：</p><pre>class Sales_item { /* ... */ };
class Sales_item { /* ... */ } accum, trans;
</pre><br></pre><pre><br></pre><pre><p class="docText">有时（但不是很经常），我们希望类的数据成员（甚至在 <tt>const</tt> 成员函数内）可以修改。这可以通过将它们声明为 <tt>mutable</tt> 来实现。<strong><a class="docLink" href="">可变数据成员（mutable data member）</a></strong>永远都不能为 <tt>const</tt>，甚至当它是 <tt>const</tt> 对象的成员时也如此。因此，<tt>const</tt> 成员函数可以改变 <tt>mutable</tt> 成员。要将数据成员声明为可变的，必须将关键字 <tt>mutable</tt> 放在成员声明之前：</p><p class="docText"><br></p><p class="docText">构造函数初始化列表以一个冒号开始，接着是一个以逗号分隔的数据成员列表，每个数据成员后面跟一个放在圆括号中的初始化式。</p><p class="docText"></p><p class="docText">从概念上讲，可以认为构造函数分两个阶段执行：（1）初始化阶段；（2）普通的计算阶段。计算阶段由构造函数函数体中的所有语句组成。</p><p class="docText"></p><p class="docText">有些成员<span class="docEmphasis">必须</span>在构造函数初始化列表中进行初始化。对于这样的成员，在构造函数函数体中对它们赋值不起作用。没有默认构造函数的类类型的成员，以及 <tt>const</tt> 或引用类型的成员，不管是哪种类型，都必须在构造函数初始化列表中进行初始化。</p><p class="docText">初始化 <tt>const</tt> 或引用类型数据成员的唯一机会是构造函数初始化列表中。必须对任何 <tt>const</tt> </p><p class="docText"><span class="docEmphStrong">或引用类型成员以及没有默认构造函数的类类型的任何成员使用初始化式。</span></p><p class="docText"><span class="docEmphStrong">构造函数初始化列表仅指定用于初始化成员的值，并不指定这些初始化执行的次序。成员被初始化的次序就是定义成员的次序。第一个成员首先被初始化，然后是第二个，依次类推。</span></p><p class="docText"><span class="docEmphStrong"><br></span></p><p>&nbsp;</p><p>&nbsp;</p></pre><img src ="http://www.cppblog.com/yjlft/aggbug/140083.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/yjlft/" target="_blank">Tony Liu</a> 2011-02-15 14:20 <a href="http://www.cppblog.com/yjlft/archive/2011/02/15/140083.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>