📄 subject_32550.htm
字号:
<p>
序号:32550 发表者:kard_king 发表日期:2003-03-12 22:34:58
<br>主题:对构造函数的疑惑
<br>内容:请看下面的程序:<BR>#include<iostream.h><BR>class TEST<BR>{<BR>public:<BR> TEST(int i)<BR> {<BR> cout<<"Constructing with"<<i<<".\n";<BR> value=i;<BR> return;<BR> }<BR> ~TEST()<BR> {<BR> cout<<"Destructing.\n";<BR> return;<BR> }<BR> int get()<BR> {<BR> return value;<BR> }<BR>private:<BR> int value;<BR>};<BR>void display(TEST obj)<BR>{<BR> cout<<"Display with"<<obj.get()<<".\n";<BR> return;<BR>}<BR>int main()<BR>{<BR> TEST explorer(5);<BR> display(explorer);<BR> return 0;<BR>}<BR><BR>这个程序的输出结果为:<BR>Constructing with 5.<BR>Display with 5.<BR>Destructing.<BR>Destructing.<BR><BR>其中display()按值调用参数,<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>回复者:啊志 回复日期:2003-03-12 22:44:52
<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>
回复者:tjhe 回复日期:2003-03-12 22:48:19
<br>内容:创建对象副本时调用的是默认拷贝构造函数,即如:<BR>TEST(const TEST& t)<BR> {<BR> value=t.value;<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>
回复者:kard_king 回复日期:2003-03-12 22:57:11
<br>内容:现在搞清了,<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 + -