标题:为什么拷贝构造函数出现了四次
只看楼主
sishui198
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2007-4-12
 问题点数:0 回复次数:4 
为什么拷贝构造函数出现了四次
#include<math.h>
#include<iostream.h>
class point
{
private:
     int x,y;
public:
    point (int xx=0,int yy=0)
    {
        x=xx;
        y=yy;
    }
 point (point &p);

    int getx()
    {
        return x;
    }
    int gety()
    {
        return y;
    }
};
 point::point(point &p)
{
    x=p.x;
    y=p.y ;
    cout<<p.x;
    cout<<"point 拷贝构造函数被调用"<<endl;
}
class distance
{
private :
    point p1,p2;
    double dist;
public :
    distance(point xp1,point xp2);
    double getdis()
    {
        return dist;
    }
};
    distance::distance(point xp1,point xp2):p1(xp1),p2(xp2)
    {
            cout<<"distance 拷贝构造函数被调用"<<endl;
            double x=double(p1.getx()-p2.getx());
            double y=double(p1.gety()-p2.gety());
            dist =sqrt(x*x+y*y);
    }
void main()
{
    point myp1(1,1),myp2(4,5);
    distance myd(myp1,myp2);
    cout<<"the distance is:";
    cout<<myd.getdis()<<endl;

}
我跟踪发现这些拷贝构造函数都来自    distance::distance(point xp1,point xp2):p1(xp1),p2(xp2)
为什么?

[[it] 本帖最后由 sishui198 于 2008-5-15 16:03 编辑 [/it]]
搜索更多相关主题的帖子: point 构造函数 拷贝 distance double 
2008-05-15 15:13
p1s
Rank: 4
等 级:贵宾
威 望:10
帖 子:454
专家分:3
注 册:2005-11-4
得分:0 
你改为
distance::distance(point &xp1,point &xp2):p1(xp1),p2(xp2)
看看还有几次。
估计是对象的值传递的时候造成了无名对象,但事实上还是要调用拷贝构造函数。
如果改了以后还剩2次说明就是这个问题。
2008-05-15 23:50
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
得分:0 
拷贝构造函数出现了2次
我在 cfree 3.5 下运行
#include<math.h>
#include<iostream.h>

class point
{
private:
    int x,y;
public:
    point (int xx=0,int yy=0) {
        x=xx; y=yy;
    }
    point (point &p);

    int getx() { return x; }
    int gety() { return y; }
};
point::point(point &p)
{
    x=p.x; y=p.y ;
    cout<<p.x<<"point 拷贝构造函数被调用"<<endl;
}

class distance
{
private :
    point p1,p2;
    double dist;
public :
    distance(point xp1,point xp2);
    double getdis() {
        return dist;
    }
};
distance::distance(point p1,point p2)//:p1(xp1),p2(xp2)
{
    cout<<"distance 拷贝构造函数被调用"<<endl;
    double x=double(p1.getx()-p2.getx());
    double y=double(p1.gety()-p2.gety());
    dist = sqrt(x*x+y*y);
}
   
void main()
{
    point myp1(1,1),myp2(4,5);
    distance myd(myp1,myp2);
    cout<<"the distance is:";
    cout<<myd.getdis()<<endl;
}

[[it] 本帖最后由 vfdff 于 2008-5-17 20:30 编辑 [/it]]

构造.JPG (10.77 KB)
2008-05-17 20:14
sishui198
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2007-4-12
得分:0 
你是把两个屏蔽了,如果按照我给的那个,确实是4次

2008-05-18 14:26
sishui198
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2007-4-12
得分:0 
谢谢了,我知道哦为什么了。

2008-05-18 14:33



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-214455-1-1.html




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

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