作业帮 > 综合 > 作业

c++中,在一个类中参数传递中出现的一个问题

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/10 08:06:37
c++中,在一个类中参数传递中出现的一个问题
设计一个类CRectangle,除了有关的数据成员外,该类还要求包含下述成员函数:矩形从一个位置移动到另外一个位置的Move()函数,改变矩形大小的Size()函数,返回矩形左上角的坐标的Where()函数,计算矩形面积的Area()函数.
我写这个程序的思路是:
Move()函数是把矩形整体移动.
Size()函数是把左上角和右下角两个坐标向外移动.比如左上角坐标和右下角坐标分别是(1,1),(2,0),那么利用Size()函数中的两个参数 1 1 以后,就变成(0,2),(3,-1).
Where()函数是把左上角的坐标输出来.
在主函数中,首先输入矩形的两个角落的坐标,然后在此基础上移动,而原来的坐标是不改变的.
然后在调用了改变矩形大小的Size()函数(这个函数中两个角落的坐标还是原来的坐标),但是.我输入了两个参数给Size()函数以后,问题就出现了.问题是输出的时候横坐标和纵坐标的位置颠倒了,而且横坐标的值变成了0,但是纵坐标的值却是利用参数改变了以后的值.所以后面的Area()函数也就跟着出现了错误(我的意愿是Area()函数是计算我改变矩形大小以后的面积,不是原来矩形的面积).
void CRectangle::Size(double X,double Y)
{
p1=((p1.getx()-X),(p1.gety()+Y)); //有问题的地方
p2=((p2.getx()+X),(p2.gety()-Y)); //由问题的地方
cout
你程序的问题出在于:
p1=((p1.getx()-X),(p1.gety()+Y)); //有问题的地方
p2=((p2.getx()+X),(p2.gety()-Y)); //由问题的地方
因为你没有重载Point类的赋值函数,执行 p1=((p1.getx()-X),(p1.gety()+Y));时,会进行复制构造函数的操作,也就是说系统会现调用构造函数生成一个临时变量(是具体编译平台,有些不生成临时变量),再将临时变量赋给P1,这里执行过程中出错了.
解决方法1:
将 p1=((p1.getx()-X),(p1.gety()+Y)); //有问题的地方
改成:
double x_val,y_val;
x_val=p1.getx();
y_val=p1.gety();
Point pTemp(x_val-X,y_val-Y);
p1=pTemp;
解决方法2:
写个Point赋值的重载函数.
void operator()(double x1,double y1)
{
x=x1;
y=y1;
}
将 p1=((p1.getx()-X),(p1.gety()+Y)); //有问题的地方
改成:
p1((p1.getx()-X),(p1.gety()+Y));