回 帖 发 新 帖 刷新版面

主题:[讨论]构造函数的值

#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<<"("<<x<<","<<y<<")"<<"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);
    point mm((point)(1,1));
    cout<<endl;
    distance myd((point)(1,1),(point)(6,13));
    cout<<"the distance is:";
    cout<<myd.getdis()<<endl;
}
为什么构造函数中传入的点参数 y的值是 0?
但是根据得到的距离 12 ,说明传入的两点 (1,1) 和(6,13)是正确的呀?可是显示却为什么出错呢?

回复列表 (共3个回复)

沙发

(1,0)和(13,0)之间的距离也是12.

板凳

不是很懂这些代码:
void main()
{
    point myp1(1,1),myp2(4,5);
    point mm((point)(1,1));//这是什么意思?
    cout<<endl;
    distance myd((point)(1,1),(point)(6,13));//(point)(1,1),(point)(6,13)什么意思?
    cout<<"the distance is:";
    cout<<myd.getdis()<<endl;
}
建意换一个驱动程序:
int main()
{
   point point1(12,45),point2(9,41);
   distance(point1,point2);
   cout<<"the distance is:";
   cout<<myd.getdis()<<endl;
   return 0;
}

还有,在构造函数中计算距离不是很妥,一个函数应完成一个单一的任务。
可以另外定义一个成员函数Distance()来完成计算距离功能。


3 楼

int main()
{
   point point1(12,45),point2(9,41);
   distance myd(point1,point2); 
   cout<<"the distance is:"<<myd.getdis()<<endl; // 能正确显示 距离 5
   
   distance myd((point)(12,45),(point)(9,41));
   cout<<"the distance is:"<<myd.getdis()<<endl; // 错误显示 距离 4 ?
   cout<<"the distance is:";
   cout<<myd.getdis()<<endl;
   return 0;
}

 point point1(12,45),point2(9,41);
 distance myd(point1,point2); 

distance myd((point)(12,45),(point)(9,41));
有什么不同呢 ??

我来回复

您尚未登录,请登录后再回复。点此登录或注册