| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 507 人关注过本帖
标题:新手求助!关于构造函数的一个问题
只看楼主 加入收藏
shyshit
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2009-8-10
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
新手求助!关于构造函数的一个问题
程序如下:
#include<iostream>
using namespace std;
class Demo
{
public:
    Demo(){cout<<"ASD\n";}
    Demo(const Demo &x){cout<<"QWE\n";}
};
Demo userCode(Demo b){Demo c(b);return c;}
int main()
{
    Demo a,d;
    cout<<"123\n";
    d=userDode(a);
    return 0;
}
我没明白那个Dome(const Demo &x)是怎么被调用三次的,帮忙点拨一下,谢谢
搜索更多相关主题的帖子: 函数 构造 
2009-08-27 16:26
xufen340
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:166
专家分:1351
注 册:2009-8-7
收藏
得分:20 
构造函数?你问的根本是拷贝构造函数问题。<BR>关键看d=userCode(a)。<BR>第一个:参数传值:Demo&nbsp;b=a后调用拷贝构造函数<BR>第二个:userCode内部Demo&nbsp;c(b);后调用拷贝构造函数&nbsp;<BR>第三个:return&nbsp;c返回时建了个临时对象,调用拷贝构造函数把c附给临时变量。<BR>
2009-08-27 16:39
shyshit
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2009-8-10
收藏
得分:0 
<b>回复 2楼 xufen340</b><br>哦~那个 return 返回值时都是返回的临时变量或者对象吗?不是直接返回return 后面的那个变量或对象吗?这个麻烦在讲解一下吧~
2009-08-27 16:56
xufen340
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:166
专家分:1351
注 册:2009-8-7
收藏
得分:0 
看函数声明确定返回的是什么
Demo userCode(Demo b)
这里是返回demo临时对象,如果你认为return c返回的是c那就错了,因为你返回的是值,不是c本身。
什么时候返回的是c,当你改成下面时是返回c
Demo& userCode(Demo b).
但是在你这个程序里面的c是局部变量,虽然你返回了别名,但是c在函数结束后就消失了,所以你的别名的主体没了,所以别名也就乱指了。
2009-08-27 17:08
宽心面
Rank: 2
等 级:论坛游民
帖 子:10
专家分:33
注 册:2009-8-27
收藏
得分:0 
临时对象什么时候会被释放掉?
2009-08-27 18:31
xufen340
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:166
专家分:1351
注 册:2009-8-7
收藏
得分:0 
临时对象当然在函数结束后释放
2009-08-27 19:11
shyshit
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2009-8-10
收藏
得分:0 
回复 4楼 xufen340
真是谢谢你了!
2009-08-27 20:08
快速回复:新手求助!关于构造函数的一个问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018338 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved