查找后更改类变量
Change class variable after finding
我目前正在C++中开发一个国际象棋引擎,在该引擎中,我试图修改另一个名为"ChessBoard"的类"ChessFile"中的字符串变量"piece"。
无论如何,当我使用函数返回一个类,然后修改所述类时,它不会更改源变量,我想知道如何做到这一点。
下面是我写的一个简单的脚本来演示:
#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
如果有必要,我也可以发布我的国际象棋引擎。非常感谢。
在您的代码中,findMyChild()
返回baby
的副本(按值返回的函数(,请使用按引用返回
child& parent::findMyChild(int var) {
if (var == 1)
{
return baby;
}
/* other codes */
return baby;
}
您将在findMyChild
中返回child
的副本。因此,您只能修改该副本,而不能修改成员本身。
您应该返回一个指向成员的指针
child* findMyChild(int var) {
return var == 1
? &baby
: nullptr;
}
然后取消引用它以获取/设置它的值。例如:
DAD.findMyChild(1)->setVar(50);
由于findMyChild
可以在我的代码中返回空指针,所以在访问之前应该检查它的存在
child* c = DAD.findMyChild(1);
if (c) c->setVar(50);
您可以通过返回另一个注释所述的child
的指针/引用来实现,也可以通过parent
类中的接口来实现。
#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;
}
相关文章:
- 查找后更改类变量
- 如何避免在仅标头库中C++类/变量重定义
- c++ 在非类函数中使用类变量
- 基于模板的类变量
- 分段 访问私有类变量时出错
- 为什么从另一个构造函数内部调用C++构造函数不修改类变量?
- 如何访问基类向量中的子类变量?(对于实体组件系统)
- 模板类变量作为非模板类的成员
- 有可能在C++中有类的查找表吗
- C++11 - 获取编译时的所有类变量,并在没有 Boost 的情况下为它们调用方法
- 如何在构造函数中访问类变量以分配它们,而无需在C++中使用此指针
- 类变量无法从类方法访问
- 指针作为类变量 Qt
- 为什么线程对类变量所做的更改没有影响?
- memcpy() 在一个类中被调用以复制到另一个类变量中后会引发异常
- C++:使用基类中的仅派生类变量
- 从静态成员函数访问私有非静态类变量 - C++
- 静态类变量的多重定义
- 使用 WindowSetup 类变量获取错误
- 将文本文件读入类变量 - c++