c++中,在一个类中参数传递中出现的一个问题
来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/09/27 21:22:14
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
设计一个类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));
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));
c++中,在一个类中参数传递中出现的一个问题
在C语言中,数组作为参数,是怎样在函数之间传递的啊?
如何在MATLAB中实现函数间的参数传递
《与朱元思书》中出现一个问题
C语言中向一个函数传递一个数组,函数中定义一个指针变量,请问这个指针变量在for循环中要怎么使用?
如何解决青少年在社会化过程中出现的早期社会化困境和无效文化传递的问题
Matlab的函数中如何实现按引用传递参数?
将两维数组int[10][20]传递给一个函数是如何定义函数参数?在函数中如何引用a[i][j
在一个神经元中,树突接收到的信息能否直接传递到轴突,由轴突向另一个神经元传递?
在ANSYS中添加命令设置土体参数的问题,特别是内聚力C的单位问题.
查找一个数字在固定数列中出现的次数
matlab非线性规划fmincon函数中目标函数参数传递问题,