📄 subject_21904.htm
字号:
<p>
序号:21904 发表者:rabbit123 发表日期:2002-11-21 10:55:47
<br>主题:常引用与常数据成员有什么区别?
<br>内容:#include <iostream.h><BR>class A<BR>{<BR>public:<BR> A(int i);<BR> void print();<BR> const int &r; //此程序运行结果正常,但若将此行改为const int r;<BR> //则输出的r是一个不确定的值,为什么?请指教。。。<BR>private:<BR> const int a;<BR> 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> cout<<a<<":"<<b<<":"<<r<<endl;<BR>}<BR>void main()<BR>{<BR> A a1(10), a2(20);<BR> a1.print();<BR> 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 &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> a=i;<BR> 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> A(int i);<BR> void print();<BR>private:<BR> const int a;<BR> const int r; //声明放在a后,这样a先被初始化,然后就可以用a来初始化r了<BR> 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 + -