gpt4 book ai didi

c++ - 为什么 setter 不更改 C++ 中的值?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:27:23 24 4
gpt4 key购买 nike

打印以下代码:

2
1

代替

2
2

为什么我的 setter 没有调整值?

主要内容

Vector location = camera.get_location();
camera.get_location().set_y(location.get_y() + 1);
std::cout << location.get_y() + 1 << std::endl;
std::cout << camera.get_location().get_y() << std::endl;

相机.h

#ifndef CAMERA_H
#define CAMERA_H

#include "vector.h"

class Camera {
private:
Vector location;
public:
Vector get_location();
void set_location(Vector);
};

#endif

相机.cpp

#include "camera.h"

Vector Camera::get_location() { return location; }
void Camera::set_location(Vector l) { location = l; }

最佳答案

camera.get_location().set_y(location.get_y() + 1);

get_location 返回原始对象的拷贝。所以 set_y 确实修改了 y 但是它正在修改原始位置的拷贝。如果您希望以上内容按预期工作,请返回reference:

Vector & get_location();

函数体和之前一样:

Vector& Camera::get_location() { return location; }

现在它将按您预期的方式工作。

你可以这样写代码:

Vector  & location = camera.get_location(); //save the reference
location.set_y(location.get_y() + 1);

它修改相机的位置对象。

将上面的代码与此进行比较:

Vector location = camera.get_location(); //save the copy!
location.set_y(location.get_y() + 1);

它不会修改camera 的位置对象!它修改拷贝,而不是原始文件。

希望对您有所帮助。

关于c++ - 为什么 setter 不更改 C++ 中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14422779/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com