В настоящее время я разрабатываю класс, который будет ссылаться на данные другого объекта. В этом новом классе я пытаюсь передать ссылку на объект, чтобы новый класс мог просматривать значения объекта без необходимости копировать исходные данные объекта. Однако я борюсь с этим.C++ Передача объекта Object Reference Into Constructor
настоящее время у меня следующий класс прототип:
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)
Есть ли изменения, которые могут быть сделаны в Rigidbody классе таким образом, что я все еще могу использовать функции-члены, даже если я объявлен объект как const? Как и в, могу ли я отметить определенные функции, чтобы они указывали, что доступ к ним не изменит никаких данных внутри объекта?
Спасибо за помощь!
Редактировать: В моем процессе описания проблемы я понял реальный вопрос, в котором я должен был спрашивать. Таким образом, я легко мог найти вопрос. Проверьте это link. В нем объясняется, что если вы инициализируете объект как const, вы не сможете получить доступ к какой-либо функции-члену этого объекта, поскольку доступ к функциям-членам может изменить данные в объекте, который был определен как const. Таким образом, если у вас есть функция-член, которую вы ЗНАЕТ, не измените данные объекта, вам нужно пометить эту функцию с помощью ключевого слова const (обратитесь к ссылке для уточнения). Это позволит вам объявить объект как const, но все же иметь доступ к определенным функциям-членам.