为对象做getter
do a getter for an object?
我的游戏类是由一个宇宙飞船组成的。我把宇宙飞船对象设为私有并为这个对象设置了getter
Spaceship Game::getSpaceShip() const
{
return mySpaceship;
}
当我在main中通过getter使用太空船对象时,它不能正常工作。如果我把它公开,只使用它的名字,它就能工作。你知道是什么导致了这个问题吗?
您正在返回我的太空船副本。尝试返回指向mySpaceship对象的指针。
Spaceship *Game::getSpaceShip()
{
return &mySpaceship;
}
或引用:
const Spaceship& Game::getSpaceShip() const
{
return mySpaceship;
}
它不是Java。在c++中,你通过值传递和返回变量!除非你想用不同的方式(通过指针或引用)。
如果你需要修改返回的引用。
Spaceship& Game::getSpaceShip()
{
return mySpaceship;
}
你的方法
Spaceship Game::getSpaceShip() const;
返回值的Spaceship
。这意味着调用者获得他们自己的 Spaceship
实例,它是从mySpaceship
初始化的。
正如yattering所说,如果您希望调用者使用同一实例,则应该返回对对象的引用。
现在,我希望看到的两个访问器方法是:Spaceship const& getSpaceship() const { return mySpaceship; }
Spaceship& getSpaceship() { return mySpaceship; }
第一个返回一个指向const Spaceship
的引用:你不能通过这个引用修改船,但是多个调用者可以查看相同的状态,如果他们只有一个指向游戏本身的const引用。
第二个返回对Spaceship
的引用:这是完全的读写访问,但您需要对Game的非const引用才能获得它。
如果有帮助,考虑一些比宇宙飞船更简单的东西:
class Wrapper {
int value;
public:
int copy_of_value() const { return value; }
int& reference_to_value() { return value; }
int const& const_reference_to_value() const { return value; }
};
现在,这些都有不同的行为:
Wrapper w;
int i = w.copy_of_value();
i += 1; // changes i but not w.value
int& j = w.reference_to_value();
j += 1; // does change w.value
int const& k = w.const_reference_to_value();
k += 1; // won't even compile
请注意,如果我一开始只有一个对w
的const引用,我可以调用两个const限定的方法,但不能调用reference_to_value
,因此const阻止我更改w.value
。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- 此getter是否返回由构造函数或对班内对象的引用给出的引用?C
- 专用对象"getter setter"特定对象
- 为实例变量(即对象)调用getter函数时实际发生的情况
- C++ - 通过 getter 函数在单独的类中从对象指针映射访问成员函数
- 无法从向量访问对象的getter
- 在没有公共getter的情况下,比较两个相同类型的对象是否相等
- 在调用右值对象的getter方法时获取右值
- 返回其他类对象的c++类getter中的错误
- 指向对象的指针的私有矢量.如何使用getter方法访问这些对象
- 代理对象/引用getter与setter
- 为对象做getter
- 找不到对象时不会崩溃的 getter 函数
- 如何让getter返回另一个对象的指针
- std::map 中的对象指针在通过 getter 检索时损坏
- c++中堆对象getter / setter的更好实践
- 为什么要继续对不可变对象使用getter呢?
- 返回带有const getter函数的成员对象,但它是可修改的