2015-11-14 156 views
1

我目前正在设计一个将引用另一个对象的数据的类。在这个新类中,我试图传递一个对象引用,以便新类可以查看对象的值,而无需复制对象的原始数据。不过,我正在为此苦苦挣扎。C++将Const对象引用传递给构造函数

目前,我有以下类原型:

Force2Motion(const RigidBody& rigid_body); 

所以,当我通过这个引用到构造函数,我想该对象已初始化后,保存这个以备将来使用。因此,我想要某种方式说

RigidBody _memberObject = rigid_body; 

但是,我想避免将所有rigid_body复制到它自己的对象。相反,我以为这样就可以创建对象时做这样的事情

// Force2Motion Member Object 
RigidBody& _rigidBody; 

更合适,然后让下面的构造

Force2Motion(const RigidBody& rigid_body): 
    _rigidBody(rigid_body) 

但是,这将引发一个错误,说,我不是允许分配一个对const引用的引用。我想确保这个新类不会重新分配构造函数的引用,因此我相信我需要const。

我的确意识到,如果我要将成员对象初始化为一个常量引用,它将允许我运行构造函数,但后来我无法使用任何对象成员函数,因为编译器认为访问成员函数可能会更改原始对象引用的数据。

这样的,我有:

const RigidBody& _rigidBody; 

与构造

Force2Motion(const RigidBody& rigid_body): 
     _rigidBody(rigid_body) 

是否有变化,可以到刚体类,这样我仍然可以使用成员函数进行,即使我已经宣布了对象为const?如在,我可以标记某些功能,以便它们表明访问它们不会更改对象内的任何数据?

感谢您的帮助!

编辑:在我描述问题的过程中,我意识到我应该问的真正问题。因此我很容易找到问题。看看这link。它解释了如果你初始化一个对象为const,你将无法访问该对象的任何成员函数,因为访问成员函数可能会改变定义为const的对象内的数据。因此,如果你有一个成员函数,你知道不会改变对象的数据,你需要用一个const关键字标记该函数(参考具体的链接)。这样做可以让你声明一个对象为const,但仍然可以访问某些成员函数。

回答

2

是的,你可以。成员函数可以制成常量

void myFunction() const; 

使用此const使得this指针常量,因此这意味着你不能修改成员变量或调用其他非const成员函数。有一些例外,如const_castmutable关键字。但这些应该可以避免。

什么时候使用这个const的一个很好的简单例子就是getters。

int getSize() const 
{ 
    return size; 
} 

由于没有什么会改变,所以可以在const或非const对象上调用此函数。

相关问题