c++ - 找到后更改类变量

标签 c++ class chess

我目前正在使用 C++ 开发国际象棋引擎,在该引擎中,我正在尝试修改另一个名为“ChessBoard”的类“ChessTile”内的字符串变量“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; 
} 

关于c++ - 找到后更改类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53096504/

相关文章:

chess - 国际象棋游戏的面向对象设计

python - 使用 Keras 进行棋子彩色图像分类

c++ - CMake 不调用 FLEX/BISON

c++在类方法中使用cout

java - 当使用一个对象作为字段(关联)与方法参数(依赖)作为另一个对象内部时

class - 为 JBOSS 类加载启用日志记录

尝试分配 64 位整数时 Swift 3 uint64 溢出

c++ - 我可以在不分配内存或复制数据的情况下构造一个对象吗?

c++ - Codeblocks 和 Qt——如何使用它们?

c++ - 自定义 C++ boost::lambda 表达式帮助