Манипулирование членами данных (C ++) - PullRequest
4 голосов
/ 25 июля 2010

У меня есть метод, который принимает объект в качестве аргумента.

И вызывающий, и аргумент имеют одинаковые члены (они являются экземплярами одного и того же класса).

В этом методе сравниваются отдельные члены, а затем, на основании этого сравнения, один членобъектом аргумента необходимо манипулировать:

class Object {

   // members

public: 

someMethod (object other) {

   int result;
   member1 - other.member1 = result;
   other.member2 = other.member2 - result;

}

Единственное, что он фактически не меняет other.member2 вне этой области, и изменение должно быть постоянным.

Так что да, извините: мне нужен совет по указателям ... Я посмотрел в Интернете и в книгах, но я не могу заставить его работать.Я полагаю, что один из вас взглянет на это и узнает ответ примерно через 30 секунд.У меня RFTM и я в тупике.Я не воодушевляю.

Спасибо всем!

Ответы [ 2 ]

8 голосов
/ 26 июля 2010

Это потому, что вы передаете по значению (что равнозначно передаче копии. Представьте, что кто-то делает ксерокопию документа, а затем просит их внести изменения, у вас все еще есть оригинал, поэтому изменения, которые они делают, выигрывают) не будет отражено в вашей копии, когда вы получите ее обратно. Но, если вы сообщите им, где находится ваша копия, они могут пойти и внести в нее изменения, которые вы увидите при следующем обращении к ней). Вам нужно передать либо ссылку на объект с

Object& object

или указатель на объект

Object * object

Проверьте эту страницу для обсуждения различий.

4 голосов
/ 26 июля 2010

Вы передаете копию из other в функцию someMethod. Попробуйте вместо указать :

someMethod(object &other) { ...

Когда вы передаете копию, ваше изменение на other.member2 меняет только копию, а не исходный объект. Однако передача ссылки делает параметр other ссылкой на исходный объект, переданный в вызов someMethod(obj).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...