【发布时间】:2016-02-15 18:32:48
【问题描述】:
我目前正在设计一个将引用另一个对象的数据的类。在这个新类中,我试图传递一个对象引用,以便新类可以查看对象的值,而无需复制对象的原始数据。但是,我正在为此苦苦挣扎。
我目前有以下类原型:
Force2Motion(const RigidBody& rigid_body);
所以当我将此引用传递给构造函数时,我想在对象初始化后保存它以备将来使用。所以我想说点什么
RigidBody _memberObject = rigid_body;
但是,我想避免将所有刚体复制到它自己的对象中。相反,我认为做这样的事情会更合适
// Force2Motion Member Object
RigidBody& _rigidBody;
然后在对象创建期间有以下构造函数
Force2Motion(const RigidBody& rigid_body):
_rigidBody(rigid_body)
但是,这会引发错误,提示我不允许将引用分配给 const 引用。我想确保这个新类不会重新分配构造函数引用,因此我相信我需要 const。
我确实意识到,如果我将成员对象初始化为 const 引用,它将允许我很好地运行构造函数,但是我不能使用任何对象成员函数,因为编译器认为访问该成员函数可能会改变原始对象引用的数据。
这样我有:
const RigidBody& _rigidBody;
带有构造函数
Force2Motion(const RigidBody& rigid_body):
_rigidBody(rigid_body)
是否可以对 RigidBody 类进行更改,以便即使我已将对象声明为 const,我仍然可以使用成员函数?例如,我是否可以标记某些函数,以便它们指示访问它们不会更改对象中的任何数据?
感谢您的帮助!
编辑:在我描述问题的过程中,我意识到我应该问的真正问题。因此,我很容易就能搜索到这个问题。看看这个link。它解释说,如果将对象初始化为 const,则将无法访问该对象的任何成员函数,因为访问成员函数可能会更改定义为 const 的对象中的数据。因此,如果您有一个您知道不会更改对象数据的成员函数,则需要使用 const 关键字标记该函数(具体请参阅链接)。这样做将允许您将对象声明为 const 但仍然可以访问某些成员函数。
【问题讨论】:
标签: c++ constructor