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

📄 subject_27599.htm

📁 vc
💻 HTM
字号:
<p>
序号:27599 发表者:模糊 发表日期:2003-01-13 20:01:43
<br>主题:一个关于拷贝初始化构造函数的调用问题!谢谢!
<br>内容:class TPoint<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TPoint(int x, int y) {X=x; Y=y;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TPoint(TPoint &amp; p);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~TPoint() {cout&lt;&lt;"析构函数被调用。\n";}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int Xcoord() {return X;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int Ycoord() {return Y;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int X, Y;<BR>&nbsp;&nbsp;&nbsp;&nbsp;};<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;TPoint::TPoint(TPoint &amp; p)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;X = p.X;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Y = p.Y;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;"拷贝初始化构造 函数被调用。\n";<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>#include &lt;iostream.h&gt;<BR>#include "tpont.h"&nbsp;&nbsp;&nbsp;&nbsp;//类的定义放于该文件中<BR>&nbsp;&nbsp;&nbsp;&nbsp;TPoint f(TPoint Q);<BR>&nbsp;&nbsp;&nbsp;&nbsp;void main()<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;TPoint M(20, 35),P(0, 0);<BR>&nbsp;&nbsp;&nbsp;&nbsp;TPoint N(M);<BR>&nbsp;&nbsp;&nbsp;&nbsp;P = f(N);<BR>&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;"P="&lt;&lt;p.Xcoord()&lt;&lt;","&lt;&lt;P.Ycoord()&lt;&lt;endl;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;TPoint f(TPoint Q)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;"ok\n";<BR>&nbsp;&nbsp;&nbsp;&nbsp;int x, y;<BR>&nbsp;&nbsp;&nbsp;&nbsp;X = Q.Xcoord()+10;<BR>&nbsp;&nbsp;&nbsp;&nbsp;Y = Q.Ycoord()+20;<BR>&nbsp;&nbsp;&nbsp;&nbsp;TPoint R(x, y);<BR>&nbsp;&nbsp;&nbsp;&nbsp;return R;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>最后的结果是:<BR>拷贝初始化构造 函数被调用。<BR>拷贝初始化构造 函数被调用。<BR>OK<BR>拷贝初始化构造 函数被调用。<BR>析构函数被调用。<BR>析构函数被调用。<BR>*************析构函数被调用。****************<BR>P=30,55<BR>析构函数被调用。<BR>析构函数被调用。<BR>析构函数被调用。<BR><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>
<font color=red>答案被接受</font><br>回复者:tjhe 回复日期:2003-01-13 20:19:01
<br>内容:return R;<BR>通过临时对象返回,即P = f(N);调用返回是R拷贝给临时对象,临时对象拷贝给P,<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>
回复者:模糊 回复日期:2003-01-13 20:46:16
<br>内容:但是我总结的赋值正好有六个:<BR>TPoint M(20,35),P(0,0);<BR>TPoint N(M);<BR>TPoint Q(N);<BR>TPoint R(x,y);<BR>TPoint P(R);<BR>正好用六个析构来释放!这中间没有临时对象啊!!我把P看作是重载的!不知道对不对!!谢谢!!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:tjhe 回复日期:2003-01-13 22:08:45
<br>内容:TPoint f(TPoint Q);返回的方式是值返回方式,函数调用返回是R拷贝给一个系统建立的临时对象,再将临时对象拷贝给接收者P。这是值返回方式得特点。<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 + -