⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_21904.htm

📁 一些关于vc的问答
💻 HTM
字号:
<p>
序号:21904 发表者:rabbit123 发表日期:2002-11-21 10:55:47
<br>主题:常引用与常数据成员有什么区别?
<br>内容:#include &lt;iostream.h&gt;<BR>class A<BR>{<BR>public:<BR>&nbsp;&nbsp;&nbsp;&nbsp;A(int i);<BR>&nbsp;&nbsp;&nbsp;&nbsp;void print();<BR>&nbsp;&nbsp;&nbsp;&nbsp;const int &amp;r; //此程序运行结果正常,但若将此行改为const int r;<BR>          //则输出的r是一个不确定的值,为什么?请指教。。。<BR>private:<BR>&nbsp;&nbsp;&nbsp;&nbsp;const int a;<BR>&nbsp;&nbsp;&nbsp;&nbsp;static const int b;<BR>};<BR>const int A::b=10;<BR>A::A(int i):a(i), r(a)<BR>{<BR>}<BR>void A::print()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;a&lt;&lt;":"&lt;&lt;b&lt;&lt;":"&lt;&lt;r&lt;&lt;endl;<BR>}<BR>void main()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;A a1(10), a2(20);<BR>&nbsp;&nbsp;&nbsp;&nbsp;a1.print();<BR>&nbsp;&nbsp;&nbsp;&nbsp;a2.print();<BR>}<BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:CDMA2000 回复日期:2002-11-21 11:03:20
<br>内容:A::A(int i):a(i), r(a)<BR>初始化顺序是按类成员声明的先后顺序来初始化的<BR>所以r先被初始化,<BR>如果用const int r,<BR>r是用a来初始化的,但a此时并没有被初始化,所以r是一个随机值<BR>但如果用const int &amp;r就不一样了,因为是引用的语法,表示<BR>r就好像a的别名,就像r就是a一样,所以不一定要等到a先初始化
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:rabbit123 回复日期:2002-11-21 11:09:28
<br>内容:改为A::A(int i):r(a),a(i)<BR>也不行。。。<BR><BR>请多费心!!! <BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:未出手的飞刀 回复日期:2002-11-21 11:15:09
<br>内容:<BR>CDMA2000说得很清楚,如果你不用引用,也可以把初始化放进{}里,<BR>A::A(int i)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;a=i;<BR>&nbsp;&nbsp;&nbsp;&nbsp;r=a;<BR>}<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:rabbit123 回复日期:2002-11-21 11:20:31
<br>内容:在构造函数中,不能对a与r进行操作。<BR>编译时会给出错误信息。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:CDMA2000 回复日期:2002-11-21 11:28:05
<br>内容:不是你那样修改的!<BR>class A<BR>{<BR>public:<BR>&nbsp;&nbsp;&nbsp;&nbsp;A(int i);<BR>&nbsp;&nbsp;&nbsp;&nbsp;void print();<BR>private:<BR>&nbsp;&nbsp;&nbsp;&nbsp;const int a;<BR>&nbsp;&nbsp;&nbsp;&nbsp;const int r; //声明放在a后,这样a先被初始化,然后就可以用a来初始化r了<BR>&nbsp;&nbsp;&nbsp;&nbsp;static const int b;<BR>};<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:rabbit123 回复日期:2002-11-21 11:29:00
<br>内容:Thank you very much!!!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:duanruiyu 回复日期:2002-11-21 11:36:47
<br>内容:我认为这和类成员的初始化顺序无关。主要看A::A(int i):a(i), r(a)<BR>中a(i)和r(a)的顺序及及引用的概念。这两点CDMA2000及DancingCalf讲的很清楚。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:未出手的飞刀 回复日期:2002-11-21 14:44:05
<br>内容:<BR>当然和类成员的初始化顺序有关,<BR>“初始化顺序是按类成员声明的先后顺序来初始化的”,而并不是在A::A(int i):a(i), r(a)中指定的顺序,所以。。。<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -