C++ 如何更改对象';s属性在另一个类中';C+中的函数+;?
我有一个名为Object的类,它具有以下属性:xPos和yPos。它还具有这些属性的getter和setter。我有另一个叫做CollisionDetector的类,它有一个叫做detect的函数,它接收两个对象并检测它们是否发生了碰撞。如果有,则使用setXPos()和setYPos()函数将它们彼此推离。但是,它不会改变值,我正在试图找出原因C++ 如何更改对象';s属性在另一个类中';C+中的函数+;?,c++,C++,我有一个名为Object的类,它具有以下属性:xPos和yPos。它还具有这些属性的getter和setter。我有另一个叫做CollisionDetector的类,它有一个叫做detect的函数,它接收两个对象并检测它们是否发生了碰撞。如果有,则使用setXPos()和setYPos()函数将它们彼此推离。但是,它不会改变值,我正在试图找出原因 Object::Object(){ } Object::Object(float x, float y) { //constructor
Object::Object(){
}
Object::Object(float x, float y) { //constructor
xPos = x;
yPos = y;
}
float Object::getXPos(){
return xPos;
}
float Object::getYPos(){
return yPos;
}
void Object::setXPos(float temp){
xPos = temp;
}
void Object::setYPos(float temp){
yPos = temp;
}
char Object::getType(){
return type;
}
bool CollisionDetector::detect(Object a, Object b){
double size = 45; //Set size
double xPosition = a.getXPos() - b.getXPos();
double yPosition = a.getYPos() - b.getYPos();
double sumRadius = (size/2 + 1) + (size/2 + 1);
double radiusSquared = sumRadius * sumRadius;
double distanceSquared = (xPosition * xPosition) + (yPosition * yPosition); //square the distances
if (distanceSquared <= radiusSquared)
{
//Check for collisions between tanks
if(a.getType() == 't' && b.getType() == 't'){
if(a.getXPos() > b.getXPos()){
a.setXPos(a.getXPos() + 10);
}
else if(a.getXPos() < b.getXPos()){
a.setXPos(a.getXPos() - 10);
}
//Same for y direction
if(a.getYPos() > b.getYPos()){
a.setYPos(a.getYPos() + 10);
}
else if(a.getYPos() < b.getYPos()){
a.setYPos(a.getYPos() - 10);
}
}
return true;
}
return false;
Object::Object(){
}
对象::对象(浮点x,浮点y){//构造函数
xPos=x;
yPos=y;
}
浮点对象::getXPos(){
返回XPO;
}
浮点对象::getYPos(){
返回YPO;
}
void对象::setXPos(浮点温度){
xPos=温度;
}
void对象::setYPos(浮点温度){
yPos=温度;
}
char对象::getType(){
返回类型;
}
布尔碰撞检测器::检测(对象a、对象b){
双倍大小=45;//设置大小
双xPosition=a.getXPos()-b.getXPos();
double-yPosition=a.getYPos()-b.getYPos();
双槽半径=(尺寸/2+1)+(尺寸/2+1);
双半径方形=半径*半径;
双距离平方=(xPosition*xPosition)+(yPosition*yPosition);//将距离平方
if(距离平方b.getXPos()){
a、 setXPos(a.getXPos()+10);
}
else if(a.getXPos()b.getYPos()){
a、 setYPos(a.getYPos()+10);
}
else if(a.getYPos()
}
使用以下命令从main调用该函数:
碰撞检测器。检测(用户油箱、enemyTank) 我在上面的评论是对的-看看这个函数-
bool碰撞检测器::检测(对象a、对象b)
您正在将对象作为值传递,因此它们将被复制到elsewere,函数将对此副本进行操作。如果要更改原始对象,请通过指针或引用传递它们。
指针:
bool碰撞检测器::检测(对象*a,对象*b)
参考:
bool碰撞检测器::检测(对象a、对象b)
你必须给函数实际的对象作为参考,就像我在上面的例子中所做的那样
现在,您正在创建变量的副本,因此不需要修改原始变量
不同的可能选项是使用指向对象的指针,如:
bool CollisionDetector::detect(Object *a, Object *b)
只需结合c++
搜索关键字reference
和pointer
,您就会找到大量关于它的文章和教程
解释一切都超出了范围。(最小)请输入代码,否则人们将无能为力。发布一条。如果不可能,请发布相关代码。我们知道您正试图找出解决方案,但如果没有代码,我们无法解决问题。我猜-您可能会将对象作为值传递(听起来像是这样)。我说的对吗?然后使用第二个选项(参考)-只需像我一样更改函数原型。一切都会奏效的。@ AthoNoT1212:考虑接受一个你发现的答案,解决了你的问题,对你来说是可以理解的。答案左边的绿色小记号。所以其他人可以直接看到你发现的解决方案。
bool CollisionDetector::detect(Object *a, Object *b)