如何在C++中更改另一个类函数中的对象属性?
How to change an object's properties in another class' function in C++?
我有一个名为Object的类,它具有以下属性:xPos和yPos。它还具有这些属性的获取者和二传手。我还有另一个叫做CollisionDetector的类,它有一个名为detect的函数,可以接收两个物体并检测它们是否碰撞。如果有,那么它使用 setXPos() 和 setYPos() 函数将它们彼此推开。但是,它不会改变值,我试图找出原因?
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;
}
该函数从主调用:collisionDetector.detect(userTank, enemyTank);
bool CollisionDetector::detect(Object &a, Object &b)
您必须像我在上面的示例中所做的那样为函数提供实际对象作为参考。
现在,您正在创建变量的副本,因此不会修改原始变量。
不同的可能选项是指向对象的指针,例如:
bool CollisionDetector::detect(Object *a, Object *b)
只需搜索关键字reference
和pointer
与c++
,您就会找到大量有关它的文章和教程。
解释一切将超出范围。
我在上面的评论中是对的 - 看看这个函数 -bool CollisionDetector::detect(Object a, Object b)
您将对象作为值传递,因此它们在其他方面被复制,并且函数对此副本进行操作。如果要更改原始对象,请通过指针或引用传递它们。
指针 : bool CollisionDetector::detect(Object* a, Object* b)
参考 : bool CollisionDetector::detect(Object &a, Object &b)
相关文章:
- 如何使用单独文件中的派生类访问友元函数对象
- 为什么我不能在主函数之外定义一个类的对象(它继承了另一个类)?
- 有没有办法将重载的类函数绑定到函数对象?
- 如何在不使用指针的情况下将派生类的对象作为参数传递给基类中的函数?
- 将另一个类的对象传递到当前类C++的构造函数中(不是成员初始化)
- 如何在类模板的成员函数中正确调用函数对象?正在生成 Visual Studio 编译器错误 C2440
- 如何在其他类中使用参数化构造函数制作类的对象?
- 玩类,对象和构造函数/C++
- "Class1"类"Class2"对象作为私有数据成员。如何通过"Class 2"函数引用"Class1"对象?
- 创建一个函数,该函数使用模板创建类或子类的对象
- C++构造函数如何初始化其类的对象?
- 如何从静态类函数初始化静态类对象
- 访问另一个类中的模板化嵌套类函数和对象
- 当我们在C++中创建类的对象时,为成员函数分配的内存在哪里?
- 如何将包装类的对象用作包装函数中的参数
- 受保护的析构函数禁用在堆栈上创建派生类的对象?
- 使用类函数将类对象添加到数组中
- 为什么在定义类之前声明类的对象会在友元类中给出错误,而在友元函数中不会出错
- 通过C++函数对象类访问参数
- 一般函数中类的概括为基类创建对象代码