找到后更改 class 变量
Change class variable after finding
我目前正在使用 C++ 开发国际象棋引擎,在该引擎中,我正在尝试修改另一个 class "ChessTile" 内的字符串变量 "piece" class 称为 "ChessBoard"。
无论如何,当我使用函数 return a class,然后修改 said class,它不会改变源变量,我想知道你是怎么做到的.
这是我写的一个简单的脚本来演示:
#include <iostream>
#include <string>
class child {
private:
int myVar;
public:
child(int v) {
myVar = v;
}
int getVar() {
return myVar;
}
int setVar(int Svar) {
this->myVar = Svar;
return 0;
}
};
class parent {
public:
child baby = child(0);
child findMyChild(int var) {
if (var == 1) {
return baby;
}
}
};
parent DAD;
int main() {
std::cout << DAD.findMyChild(1).getVar() << std::endl;
DAD.findMyChild(1).setVar(50);
std::cout << DAD.findMyChild(1).getVar() << std::endl;
}
这个输出是:
0
0
但我希望它是:
0
50
如有必要,我也可以 post 我的国际象棋引擎。谢谢!
您正在 return 在 findMyChild
中复制 child
。因此,您只修改该副本,而不修改成员本身。
你应该return一个指向成员的指针
child* findMyChild(int var) {
return var == 1
? &baby
: nullptr;
}
然后取消引用它 get/set 它的值。例如:
DAD.findMyChild(1)->setVar(50);
因为 findMyChild
可以在我的代码中 return 空指针你应该在访问之前检查它的存在
child* c = DAD.findMyChild(1);
if (c) c->setVar(50);
您可以通过返回 child
的 pointer/reference 来完成,如另一条评论所述,或者您可以通过 parent
class.[=13 中的界面来完成=]
#include <iostream>
#include <string>
#define FIRST_CHILD 1
#define CANNOT_FIND_CHILD -1
class child {
private:
int myVar;
public:
child(int v) {
myVar = v;
}
int childGetVar() {
return myVar;
}
int childSetVar(int Svar) {
this->myVar = Svar;
return 0;
}
};
class parent {
public:
child baby = child(0);
int getVar(int var) {
if (var == FIRST_CHILD)
return baby.childGetVar();
return CANNOT_FIND_CHILD;
}
int setVar(int var, int Svar) {
if (var == FIRST_CHILD)
baby.childSetVar(Svar);
return CANNOT_FIND_CHILD;
}
};
parent DAD;
int main() {
std::cout << DAD.getVar(FIRST_CHILD) << std::endl;
DAD.setVar(FIRST_CHILD, 50);
std::cout << DAD.getVar(FIRST_CHILD) << std::endl;
}
在您的代码中,findMyChild()
是 return 的 baby
副本(函数 return 按值),按引用使用 return而是这样。
child& parent::findMyChild(int var) {
if (var == 1)
{
return baby;
}
/* other codes */
return baby;
}
我目前正在使用 C++ 开发国际象棋引擎,在该引擎中,我正在尝试修改另一个 class "ChessTile" 内的字符串变量 "piece" class 称为 "ChessBoard"。
无论如何,当我使用函数 return a class,然后修改 said class,它不会改变源变量,我想知道你是怎么做到的.
这是我写的一个简单的脚本来演示:
#include <iostream>
#include <string>
class child {
private:
int myVar;
public:
child(int v) {
myVar = v;
}
int getVar() {
return myVar;
}
int setVar(int Svar) {
this->myVar = Svar;
return 0;
}
};
class parent {
public:
child baby = child(0);
child findMyChild(int var) {
if (var == 1) {
return baby;
}
}
};
parent DAD;
int main() {
std::cout << DAD.findMyChild(1).getVar() << std::endl;
DAD.findMyChild(1).setVar(50);
std::cout << DAD.findMyChild(1).getVar() << std::endl;
}
这个输出是:
0
0
但我希望它是:
0
50
如有必要,我也可以 post 我的国际象棋引擎。谢谢!
您正在 return 在 findMyChild
中复制 child
。因此,您只修改该副本,而不修改成员本身。
你应该return一个指向成员的指针
child* findMyChild(int var) {
return var == 1
? &baby
: nullptr;
}
然后取消引用它 get/set 它的值。例如:
DAD.findMyChild(1)->setVar(50);
因为 findMyChild
可以在我的代码中 return 空指针你应该在访问之前检查它的存在
child* c = DAD.findMyChild(1);
if (c) c->setVar(50);
您可以通过返回 child
的 pointer/reference 来完成,如另一条评论所述,或者您可以通过 parent
class.[=13 中的界面来完成=]
#include <iostream>
#include <string>
#define FIRST_CHILD 1
#define CANNOT_FIND_CHILD -1
class child {
private:
int myVar;
public:
child(int v) {
myVar = v;
}
int childGetVar() {
return myVar;
}
int childSetVar(int Svar) {
this->myVar = Svar;
return 0;
}
};
class parent {
public:
child baby = child(0);
int getVar(int var) {
if (var == FIRST_CHILD)
return baby.childGetVar();
return CANNOT_FIND_CHILD;
}
int setVar(int var, int Svar) {
if (var == FIRST_CHILD)
baby.childSetVar(Svar);
return CANNOT_FIND_CHILD;
}
};
parent DAD;
int main() {
std::cout << DAD.getVar(FIRST_CHILD) << std::endl;
DAD.setVar(FIRST_CHILD, 50);
std::cout << DAD.getVar(FIRST_CHILD) << std::endl;
}
在您的代码中,findMyChild()
是 return 的 baby
副本(函数 return 按值),按引用使用 return而是这样。
child& parent::findMyChild(int var) {
if (var == 1)
{
return baby;
}
/* other codes */
return baby;
}