| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 981 人关注过本帖
标题:拷贝构造函数的问题
取消只看楼主 加入收藏
jjg
Rank: 2
等 级:论坛游民
帖 子:67
专家分:42
注 册:2009-8-19
结帖率:46.15%
收藏
 问题点数:0 回复次数:2 
拷贝构造函数的问题






#include <string.h>
#include <iostream.h>
class name
{
public:
    name()
    {
        pname=0;
        cout<<"默认构造函数"<<endl;
    }
    name(char* pn)
    {
        copyname(pn);
        cout<<"构造函数"<<endl;
    }
    name(name& s)
    {
        cout<<"拷贝构造"<<endl;
        copyname(s.pname);
        
    }
    ~name()
    {
        //deletename();
        cout<<"析构";
    }
    name& operator=(name& s)
    {
        //deletename();
        copyname(s.pname);
        cout<<"赋值运算符"<<endl;
        return *this;
    }
    void display()
    {
        cout<<pname<<endl;
    }
protected:
    void copyname(char * pn);
//    void deletename();
    char* pname;
};
void name::copyname(char* pn)
{
    pname=new char[strlen(pn)+1];
    if(pname)
    {
        strcpy(pname,pn);
    }
}
/*void name::deletename()
{
    if(pname)
    {
        delete pname;
        pname=0;
    }
}*/
void main()
{
    name s("clau");
    name t;
    //t.display();
    t=s;
    t.display();

}
//去掉重载赋值运算符函数之后,结果怎么就不调用拷贝构造函数呢?
搜索更多相关主题的帖子: 函数 构造 拷贝 
2009-11-16 08:40
jjg
Rank: 2
等 级:论坛游民
帖 子:67
专家分:42
注 册:2009-8-19
收藏
得分:0 
回复 2楼 faint_zjr
不是这样的,对t=s如果有赋值运算符重载就会调用的,如果没有运算符重载应该就要调用拷贝构造函数啊,这不是对象的拷贝吗?
2009-11-16 17:42
jjg
Rank: 2
等 级:论坛游民
帖 子:67
专家分:42
注 册:2009-8-19
收藏
得分:0 
回复 6楼 中学者
如果用户明确定义Operator =,那么就会调用用户定义的那个;否则,会调用编译器生成的那个(进行逐成员位拷贝).
另外,CLASS a = b;

   CLASS a;
   a = b;
是不一样的.
第一个,会调用Copy constructor(当然,也是用户定义就用用户的,没有定义就用编译器生成的)
第二个,a先构造完成后,才用operator = 来让b给它拷贝.

对于class b;CLASS a = b;这里不是a和b共享b这个空间,而是把b的空间复制给了a,是不是就是因为有拷贝构造函数,就进行了深拷贝。
 对于CLASS a = b;和class a(b)又是不是有什么不同
2009-11-18 19:54
快速回复:拷贝构造函数的问题
数据加载中...
 
   



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

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